【发布时间】:2018-01-18 21:55:05
【问题描述】:
我在 Swift 中使用 Twitter REST API,我试图获取在 Twitter Request 闭包内分配的变量的值,以便我可以在闭包之外使用该值。
我从 Swift 的 Twitter REST API 教程中获得了这段代码,位于:https://dev.twitter.com/twitterkit/ios/access-rest-api
func jsonAvailable() -> Bool {
// Swift
let client = TWTRAPIClient()
let statusesShowEndpoint = "https://api.twitter.com/1.1/statuses/show.json"
let params = ["id": "20"]
var clientError : NSError?
var jsonAvailable: Bool = false
let request = client.urlRequest(withMethod: "GET", url:
statusesShowEndpoint, parameters: params, error: &clientError)
client.sendTwitterRequest(request) { (response, data, connectionError)-> Void in
if connectionError != nil {
print("Error: \(connectionError)")
}
do {
let json = try JSONSerialization.jsonObject(with: data!, options: [])
print("json: \(json)")
jsonAvailable = true
} catch let jsonError as NSError {
print("json error: \(jsonError.localizedDescription)")
}
print("Value of jsonAvailable: \(jsonAvailable)")
return jsonAvailable
//always returns false, even if it is changed to true inside of the closure
}
在最后一行中,jsonAvailable 始终为 false,即使在闭包内将其更改为 true。如何在函数末尾获取 jsonAvailable 的值,即使它在 sendTwitterRequest 闭包内部进行了修改?
我尝试在单独的函数中编写此闭包,然后调用该函数以获取值,但因为它是一个自定义闭包,需要通过“sendTwitterRequest”调用客户端,我发现很难传递所有这些适应 API 所需的参数。
感谢您的帮助!
【问题讨论】:
标签: ios swift twitter swift3 closures