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=。。。。