2017-06-09 11 views
0

我的目標是使用標準的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函數。我在構建我的方法時做錯了什麼?

回答

1

你有completionHandler你應該使用,如果你想返回值的當前語法。如果你想使用return players那麼你必須改變語法。

使用此語法,而不是使你當前的代碼工作與completionHandler

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

明白了。而當返回時,它應該被「完成(玩家)」? – daspianist

+1

@daspianist,是伴侶。 –

+1

完美。這做到了。謝謝您的幫助。 – daspianist