Swift 使用非 void 完成处理程序的网络出错

Swift networking with non-void completion handler gets error

我的目标是使用标准 Moya 请求调用设置 completion handler

这是我的过程:

  1. 使用符合我自己的BackendAPI(已设置)的MoyaProvider调用后端
  2. 将此调用包装在 return [Player] 数据的完成处理程序中(Player 是项目中的自定义 class)
  3. 显示[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
}