gpt4 book ai didi

ios - 从闭包中返回元组

转载 作者:搜寻专家 更新时间:2023-11-01 06:24:34 25 4
gpt4 key购买 nike

我正在尝试创建一个类以在 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 token )。我有一个名为 HTTPHandler 的单独类,它调用服务器,我得到并可以成功解析响应。这是示例 JSON 输出。

(
2,
JDJ5JDEwJFZ4ZkR4eXlkYUxiYS93TXUwbjBtbnUzaVhidFZBUVVtMTRJM0J3WFFBemszSVVjZ3RWd05h
)

但我无法返回元组中的值。我收到以下两个错误。我在上面的代码片段中对它们进行了注释。

我仍在为 Swift 中的闭包语法苦苦挣扎,所以我不完全确定我是否做对了。我已经将闭包定义为常量。这样我可以从另一个类调用这个闭包吗?如果没有,我怎样才能做到这一点?

有人可以帮我解决这些问题吗?

谢谢。

最佳答案

首先,为了返回 nil 你需要让你的闭包返回一个可选的元组。使用 (Int, String)?(Int, String)! 而不是 (Int, String)

您收到错误消息“元组类型‘(AnyObject!, AnyObject!)’和‘()’具有不同数量的元素”,因为您试图返回 (Int, String) 元组而不是 Void这就是闭包返回的内容。

我现在无法自己测试它,但它看起来像这样:

let login = {(email: String, password: String) -> (Int, String)? in

var returnTuple: (Int, String)? = nil
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)
returnTuple = (values[0], values[1])
}
let httpHandler = HTTPHandler.POST(SERVER_URL + POSTendpoints.login, data: ["email": email, "password": password], response: response)

return returnTuple
}

关于ios - 从闭包中返回元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24993219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com