[英]How to get the value of the variable that is assigned in a closure (Swift)
我正在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更改為true,它也始終為false。 即使在sendTwitterRequest閉包內部進行了修改,如何在函數末尾獲取jsonAvailable的值?
我嘗試在單獨的函數中編寫此閉包,然后調用該函數以獲取值,但是由於這是一個自定義閉包,需要通過“ 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)
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.