gpt4 book ai didi

ios - 如何获取在闭包中分配的变量的值(Swift)

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

我在 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。

感谢您的帮助!

最佳答案

您的闭包是异步的。发生的情况是,在 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)
})

关于ios - 如何获取在闭包中分配的变量的值(Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45617274/

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