【问题标题】:typealias closure error in swiftswift中的typealias关闭错误
【发布时间】:2015-04-24 08:56:54
【问题描述】:

我在一个 Swift 项目中使用 AFNetworking。

1 - Typealias 闭包:

typealias successBlock = (AFHTTPRequestOperation! ,AnyObject!)-> Void
typealias failureBlock = (AFHTTPRequestOperation, NSError!) -> Void

2 - 定义函数:

func getUserInfo(success: (successBlock)!, failure: (failureBlock)!) {
   let path = "https://api.wei.s.json"
   let parameters = ["source":"key"]
   self.GET(path, parameters: parameters, success: success, failure: failure)
}

3 - 错误:

不能使用类型为“(String,parameters: [String : String], success: (successBlock)!, failure: (failureBlock)!)”的参数列表调用“GET”

感谢您的帮助。

EIDT:

typealias failureBlock = (AFHTTPRequestOperation, NSError!) -> Void

typealias failureBlock = (AFHTTPRequestOperation!, NSError!) -> Void

【问题讨论】:

  • (successBlock)! 中删除括号会发生什么?
  • 这可能是因为 AFNetworking 是一个 Objective-C 库,它不喜欢 GET 方法的 'path' 和 'parameters' 参数的 swift 'String' 类型。使用名为 AlamoFire 的 AFNetworking 快速版本可能会更好,这样您就不会遇到这些类型的问题。
  • @Clashsoft 同样的错误。
  • @deanware 好像不是这个原因,我只试过块参数。
  • GET 是如何定义的?

标签: swift afnetworking


【解决方案1】:

我认为你错过了一个!在 failureBlock 类型别名定义上,它期望显式解包的可选 AFHTTPRequestOperation 而不是标准的 AFHTTPRequestOperation 实际上是不同的类型。我认为应该是,

typealias failureBlock = (AFHTTPRequestOperation!, NSError!) -> Void

【讨论】:

  • 对我来说,也隐式解包方法输入参数似乎有点危险,要么传入可选参数并使用 if let 解包它们,如果它们存在则调用 GET 并处理它们时的情况不是或使它们成为非可选的。
【解决方案2】:

试试看:

func getUserInfo(success: (successBlock)!, failure: (failureBlock)!) {
   let path = "https://api.wei.s.json"
   let parameters = ["source":"key"]
   self.GET(path, parameters: parameters, success: success!, failure: failure!)
}

(注意参数成功和失败的两个“砰”!

这是基于 GET 函数期望闭包而不是引用闭包的可选函数的假设。可能就是这样。否则,使用击键在 self.GET 上完成方法并查看 Swift 期望的类型。它会告诉你哪里出了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多