【发布时间】:2021-05-24 21:13:08
【问题描述】:
函数返回结果为零。我知道它异步工作。我尝试使用completionHandler,但我做得不够好,而且我只有很多错误。在这种情况下如何使用completionHandler?有没有更简单的方法来检查令牌?
func isAuthenticated() -> Bool {
guard let url = URL(string: self.url + "/api/authenticate") else {
return false
}
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.addValue("*/*", forHTTPHeaderField: "accept")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue(JWT.getToken(), forHTTPHeaderField: "Authorization")
var result: Bool?
URLSession.shared.dataTask(with: request){ (data, response, error) in
guard error == nil else { print(error!.localizedDescription); return }
let httpResponse = response as! HTTPURLResponse
if httpResponse.statusCode == 200 {
result = true
} else {
result = false
}
}.resume()
return result!
}
函数调用:
if isAuthenticated() {
self.performSegue(withIdentifier: "loginOK", sender: self)
}
【问题讨论】:
-
dataTask(with:completion:)是异步的。您不能这样返回它,因为尚未完成。当您执行if httpResponse.statusCode == 200时,在print("Did get httpResponse: \(httpResponse.statusCode)")之前添加,在return result!之前添加``print("before return")`。哪个会先打印?依你的意见?在现实中?
标签: ios swift session url completionhandler