0

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

这是我的过程:

  1. MoyaProvider使用符合我自己的BackendAPI(已设置)的调用后端
  2. 将此调用包装在完成处理程序中以返回[Player]数据(Player是项目中的自定义类)
  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-voidreturn in void 函数。但是,我已将我的函数声明为non-void函数。我在构建方法时做错了什么?

4

1 回答 1

1

completionHandler如果您想使用当前语法返回值,您应该使用它。如果要使用,return players则必须更改语法。

请改用此语法来使您当前的代码与completionHandler:

func getPlayers(orchestraId: String, finished: @escaping ([Player]) -> Void) { 
    finished(players) // Instead of return players
}
于 2017-06-09T22:55:00.463 回答