【发布时间】:2014-07-28 10:26:28
【问题描述】:
我正在尝试创建一个类来从 Swift 中的 Web API 中检索 JSON。我没有使用代表,而是考虑使用闭包,但我在一些事情上遇到了困难。
let login = {(email: String, password: String) -> (Int, String) in
let response = { (response: NSHTTPURLResponse!, data: HTTPHandler.Data!, error: NSError!) -> Void in
var value: String? = response.allHeaderFields[HTTPHeaderFields.token] as AnyObject? as? String
var headerData = value?.dataUsingEncoding(NSASCIIStringEncoding)
var values: NSArray = NSJSONSerialization.JSONObjectWithData(headerData, options: .AllowFragments, error: nil) as NSArray
println(values)
return (values[0], values[1]) // Tuple types '(AnyObject!, AnyObject!)' and '()' have a different number of elements (2 vs. 0)
}
let httpHandler = HTTPHandler.POST(SERVER_URL + POSTendpoints.login, data: ["email": email, "password": password], response: response)
return nil // Type '(Int, String)' does not conform to protocol 'NilLiteralConvertible'
}
这是我写的闭包。它接受两个参数(电子邮件、密码)并应返回一个元组(用户 ID、API 令牌)。我有一个名为HTTPHandler 的单独类,它调用服务器,我得到并可以成功解析响应。这是示例 JSON 输出。
(
2,
JDJ5JDEwJFZ4ZkR4eXlkYUxiYS93TXUwbjBtbnUzaVhidFZBUVVtMTRJM0J3WFFBemszSVVjZ3RWd05h
)
但我无法返回元组中的值。我得到以下两个错误。我已经在上面的代码 sn-p 中对它们进行了注释。
我仍在为 Swift 中的闭包语法而苦苦挣扎,所以我不完全确定我是否做得对。我已经将闭包定义为一个常量。这样我可以从另一个类调用这个闭包吗?如果没有,我怎样才能做到这一点?
有人可以帮我解决这些问题吗?
谢谢。
【问题讨论】: