gpt4 book ai didi

ios - 从 Alamofire 闭包返回一个值

转载 作者:行者123 更新时间:2023-11-29 05:31:01 24 4
gpt4 key购买 nike

我在名为 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 serverResponse

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

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

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

我尝试在 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
}

由于您位于实际 block 内,因此无法执行 return 语句。这就是您收到的错误。该 block 本身并不要求返回。不像 map, filter, reduce等等

关于ios - 从 Alamofire 闭包返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57568819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com