Swift 使用非 void 完成处理程序的网络出错
Swift networking with non-void completion handler gets error
我的目标是使用标准 Moya 请求调用设置 completion handler
。
这是我的过程:
- 使用符合我自己的
BackendAPI
(已设置)的MoyaProvider
调用后端
- 将此调用包装在 return
[Player]
数据的完成处理程序中(Player
是项目中的自定义 class)
- 显示
[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
行收到一个错误,注意 unexpected non-void
return in void function。但是,我已将我的函数声明为 non-void
函数。我在构造我的方法时做错了什么?
你有 completionHandler
,如果你想 return 使用当前语法的值,你应该使用它。如果要使用 return players
,则必须更改语法。
改用此语法使您当前的代码与 completionHandler
:
一起工作
func getPlayers(orchestraId: String, finished: @escaping ([Player]) -> Void) {
finished(players) // Instead of return players
}
我的目标是使用标准 Moya 请求调用设置 completion handler
。
这是我的过程:
- 使用符合我自己的
BackendAPI
(已设置)的MoyaProvider
调用后端 - 将此调用包装在 return
[Player]
数据的完成处理程序中(Player
是项目中的自定义 class) - 显示
[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
行收到一个错误,注意 unexpected non-void
return in void function。但是,我已将我的函数声明为 non-void
函数。我在构造我的方法时做错了什么?
你有 completionHandler
,如果你想 return 使用当前语法的值,你应该使用它。如果要使用 return players
,则必须更改语法。
改用此语法使您当前的代码与 completionHandler
:
func getPlayers(orchestraId: String, finished: @escaping ([Player]) -> Void) {
finished(players) // Instead of return players
}