ten*_*s25 1 twitter closures ios swift swift3
我在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
}
Run Code Online (Sandbox Code Playgroud)
在最后一行中,jsonAvailable始终为false,即使在闭包内更改为true也是如此.如何在函数末尾获取jsonAvailable的值,即使它在sendTwitterRequest闭包内被修改了?
我试过在一个单独的函数中编写这个闭包,然后调用函数来获取值,但因为它是一个自定义闭包,需要通过"sendTwitterRequest"调用客户端,我发现很难将所有这些必需的参数传递给适合API.
谢谢您的帮助!
你的闭包是异步的.会发生什么事情是在sendTwitterRequest分配true 之前通过所有函数体jsonAvailable,导致jsonAvailable为false.您需要做的是改为使用回调,如果您愿意,则提供json状态(或者json本身作为可以为对象的对象).
编辑:你可以有类似的东西
func jsonAvailable(callback: ((_ isJsonAvailable: Bool) -> Void)) {
client.sendTwitterRequest(request) { (response, data, connectionError)-> Void in {
do {
let json = try JSONSerialization.jsonObject(with: data!, options: [])
print("json: \(json)")
callback(true)
} catch let jsonError as NSError {
print("json error: \(jsonError.localizedDescription)")
callback(false)
}
}
}
jsonAvailable(callback: { (_ isJsonAvailable: Bool) in
print(isJsonAvailable)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |