我在Swift中使用Twitter REST API,并且试图获取在Twitter请求中分配的变量的值闭包,这样我可以在闭包之外使用该值。如何获得在闭包中分配的变量的值(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永远是假的,甚至当它变为真正封闭的内部。如何在函数的末尾获取jsonAvailable的值,即使它在sendTwitterRequest闭包内部被修改?
我已经尝试在单独的函数中编写此闭包,然后调用函数来获取值,但是因为它是自定义闭包,需要通过“sendTwitterRequest”调用客户端,所以我发现很难全部通过这些所需的参数适合API。
感谢您的帮助!
感谢您的答复!所以通过回调,你是指对另一个函数的调用,还是在函数结束时再次调用这个闭包? – tennis25
回调函数是您作为参数传递给'jsonAvailable'的另一个闭包。在您的请求成功后,您将执行回调(jsonAvailable)。 @ tennis25增加了一个代码示例来展示我的意思。 –