我有一个返回布尔值(默认为false)并使用Alamofire调用返回字符串的API的方法。但是,由于API请求是异步的,因此该方法将始终完成并在异步请求完成之前返回false。 我如何才能等到API调用“实际上”完成后才能返回正确的结果?
我尝试将return语句放入.success和.failure块中,但这会导致错误
func validateCredentials() -> Bool{
var apiResult = false
Alamofire.request("http://myURL?pUser=\(usernameTextField.text!)&pPwd=\(passwordTextField.text!)&pCheckIt=y")
.responseString {
response in
switch response.result{
case .success:
apiResult = true
case .failure:
apiResult = false
}
}
ProgressHUD.show("Please wait...")
return apiResult . <==== Always return false
}
答案 0 :(得分:0)
您需要放入转义完成块,如下所示。
func validateCredentials(completion:@escaping(Bool) -> Void) {
ProgressHUD.show("Please wait...")
Alamofire.request("http://myURL?pUser=\(usernameTextField.text!)&pPwd=\(passwordTextField.text!)&pCheckIt=y")
.responseString {
ProgressHUD.hide()
response in
switch response.result{
case .success:
completion(true)
case .failure:
completion(false)
}
}
}