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)
                }
        }

    }