与非void完成处理程序的Swift网络获取错误
问题描述:
我的目标是使用标准的Moya请求调用设置completion handler
。与非void完成处理程序的Swift网络获取错误
这里是我的过程:
- 与一个
MoyaProvider
符合我自己的BackendAPI
(已设立) - 环绕此调用完成处理程序返回
[Player]
数据(Player
是呼叫后台该项目自定义类) - 显示
[Player]
数据
下面是实际的代码:
func getPlayers(orchestraId: String, finished: @escaping() -> [Player]) {
let provider = MoyaProvider<BackendAPI>()
provider.request(.getPlayers(orchestraId: orchestraId)) { (result) in
switch result {
case let .success(moyaResponse):
let statusCode = moyaResponse.statusCode
if statusCode == 200 {
let data = moyaResponse.data
let json = JSON.init(data: data)
let players: [Player] = self.deserializeJSONPlayers(with: json)
return players
} else {
print ("Non 200 for league players data")
self.debugStatementsFromResponse(response: moyaResponse)
}
case let .failure(error):
print ("Error: \(error)")
}
}
}
我得到一个错误的return
线,与注意,意外non-void
返回空隙功能。不过,我已经宣布我的功能是non-void
函数。我在构建我的方法时做错了什么?
答
你有completionHandler
你应该使用,如果你想返回值的当前语法。如果你想使用return players
那么你必须改变语法。
使用此语法,而不是使你当前的代码工作与completionHandler
:
func getPlayers(orchestraId: String, finished: @escaping ([Player]) -> Void) {
finished(players) // Instead of return players
}
明白了。而当返回时,它应该被“完成(玩家)”? – daspianist
@daspianist,是伴侣。 –
完美。这做到了。谢谢您的帮助。 – daspianist