与非void完成处理程序的Swift网络获取错误

问题描述:

我的目标是使用标准的Moya请求调用设置completion handler与非void完成处理程序的Swift网络获取错误

这里是我的过程:

  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线,与注意,意外non-void返回空隙功能。不过,我已经宣布我的功能是non-void函数。我在构建我的方法时做错了什么?

你有completionHandler你应该使用,如果你想返回值的当前语法。如果你想使用return players那么你必须改变语法。

使用此语法,而不是使你当前的代码工作与completionHandler

func getPlayers(orchestraId: String, finished: @escaping ([Player]) -> Void) { 
    finished(players) // Instead of return players 
} 
+0

明白了。而当返回时,它应该被“完成(玩家)”? – daspianist

+1

@daspianist,是伴侣。 –

+1

完美。这做到了。谢谢您的帮助。 – daspianist