Swift3 函数对swift 3中变量的闭包结果
我有一个做异步调用的函数Swift3 函数对swift 3中变量的闭包结果,swift3,Swift3,我有一个做异步调用的函数 func getToken(completionHandler:@escaping (_ stringResponse: String) -> Void) { var testResult: String! = "20,5º" let url: String! = "https://the.base.url/token" let parameters: Parameters = [ "key":"value" ] Alamofire.request
func getToken(completionHandler:@escaping (_ stringResponse: String) -> Void) {
var testResult: String! = "20,5º"
let url: String! = "https://the.base.url/token"
let parameters: Parameters = [
"key":"value"
]
Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding(destination: .methodDependent)).validate().responseJSON { response in
switch response.result {
case .success:
testResult = "21º"
case .failure(let error):
testResult = error as! String
}
completionHandler(testResult)
}
}
我称之为函数
getToken(completionHandler: {
(stringResponse: String) in
print(stringResponse)
})
它很好地打印了21º,正如我在调试器中看到的。但是,stringResponse的最终值应以
lblTemp.setText(String(//here the results of stringResponse))
我该怎么做?我猜这一定非常简单。你需要这样做
getToken(completionHandler: { [weak self] (stringResponse: String) in
DispatchQueue.main.async {
self?.lblTemp.text = stringResponse
}
})
您还应该通过添加[weak self]来避免保留周期。我的最后一个代码是getTokencompletionHandler:{stringResponse:String in DispatchQueue.main.async{self.lblTemp.settextStringResponse}},这不一样吗?要避免保留周期,您必须使用[weak self]还有两点:首先,澄清一下,这不是一个强有力的参考循环。它只是一个强引用,在请求完成时得到解决。尽管如此,[脆弱的自我]还是很谨慎,为什么要坚持得比你需要的时间更长呢?。第二,你在结束语中没有提到自我。也许你是指self?.lblTemp.text=。。。。