[英]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
对象,我认为这是因为在closure
中api
调用正在后台处理,因此在结果来自服务器之前, 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.