Alamofire等待完成

时间:2019-09-10 12:40:01

标签: swift4 alamofire

我有一个返回布尔值(默认为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

}

1 个答案:

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

    }