繁体   English   中英

从Alamofire闭包返回值

[英]Return a value from a Alamofire closure

我在名为A的类中将此函数称为sendRequest ,并且此sendRequest函数返回Any对象,并在第一行中创建了一个类似于var serverResponse = JSON()的变量,并且我需要此代码

upload.uploadProgress(closure: { (Progress) in
                })
       upload.responseJSON { response in

       print(response.response?.statusCode as Any)

       if(response.result.isSuccess){
            serverResponse = JSON(response.result.value!)
            print("Success\(serverResponse)")

       }else{
            serverResponse = JSON(response.result.value!)
            print("No Success\(serverResponse)")
       }
  }

上面的代码在sendRequest函数内部,在此闭包的结尾/结尾处,我有一个return语句,返回服务器响应return serverResponse

我正在从类B访问此函数,我创建了类A的对象,现在在类B中有此代码

var response: Any =  request.sendRequest("url", parameters: body, headers: [:])

现在的问题是,这里的响应变量将始终有一个空的JSON对象,我认为这是因为在closureapi调用正在后台处理,因此在结果来自服务器之前, return语句已执行,给了我一个空的JSON B类上的物体

我尝试在if语句中返回serverResponse在该语句中检查其是否成功,并给我这样的错误:

Unexpected non-void return value in void function

那么我该如何解决这个问题呢?

你是对的。 由于它在后台线程上运行,因此返回空。 因此,在发出网络请求时,我们倾向于使用completionBlocks Swift 5实现了Result<Any, Error>的新类型,这真的很方便。

尝试改为在函数参数中实现completion((Result<Any, Error>) -> ()) 当您收到答复时,请解开我的文章:

switch result {
    case .succeses(let data):
    //Do something
    break
    case .failure(let error):
    //Do something
    break
}

由于您位于实际块中,因此无法执行return语句。 那就是你得到的错误。 块本身不要求退货。 map, filter, reduce等不同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM