Alamofire 等待完成
Alamofire Wait for completion
我有一个方法 return 是一个布尔值(默认为 false)并使用 Alamofire 调用 API 其中 return 是一个字符串。然而,由于 API 请求是异步的,该方法总是在异步请求完成之前完成并且 returns false。
我如何才能等到 API 调用 'actually' 完成才能获得 return 正确的结果?
我试过将 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
}
你需要像下面这样放置转义完成块。
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)
}
}
}
我有一个方法 return 是一个布尔值(默认为 false)并使用 Alamofire 调用 API 其中 return 是一个字符串。然而,由于 API 请求是异步的,该方法总是在异步请求完成之前完成并且 returns false。 我如何才能等到 API 调用 'actually' 完成才能获得 return 正确的结果?
我试过将 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
}
你需要像下面这样放置转义完成块。
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)
}
}
}