Alamofire 等待完成

Posted

技术标签:

【中文标题】Alamofire 等待完成【英文标题】:Alamofire Wait for completion 【发布时间】:2019-09-10 12:40:01 【问题描述】:

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


【问题讨论】:

Returning data from async call in Swift function的可能重复 【参考方案1】:

您需要像下面这样放置转义完成块。

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)
                
        

    

【讨论】:

以上是关于Alamofire 等待完成的主要内容,如果未能解决你的问题,请参考以下文章

在 Alamofire 中,等待一组调用完成的正确方法是啥?

AlamoFire downloadProgress 完成处理程序到异步/等待

如何使用 Alamofire 等待 API 响应 [重复]

强制 Alamofire 在主线程上做所有事情?

Alamofire 和并发操作队列

Swift Alamofire 检查等待超时并放置错误