2017-05-21 16 views
1

同じAPIに対して3つの異なるリクエストを行う必要があります。これらの呼び出しはいずれも、他の呼び出しに依存しません。私は良い方法ではないかもしれない、とこのついて行くのより良い方法に向けたいくつかのガイダンスを探しています。このように感じるAlamofire入れ子リクエスト

API.getPopularMovies() { responseObject, error in 
     if let results = responseObject { 
      self.popularMovies = results 

      self.API.getNowPlayingMovies() { responseObject, error in 
       if let results = responseObject { 
        self.nowPlayingMovies = results 

        self.API.getUpcomingMovies() { responseObject, error in 
         if let results = responseObject { 
          self.upcomingMovies = results 

          self.movies = [self.popularMovies, self.nowPlayingMovies, self.upcomingMovies] 
          self.tableView.reloadData() 
         } 
        } 
       } 
      } 
     } 
    } 
} 

:私は現在、私の要求はそれほどのように入れ子になっています。現在、結果として得られる配列はテーブルビューに正しく挿入されているようですが、このネストされたアプローチが間違っているように感じることはできません。

答えて

0

あなたの操作のどれもが依存していない場合は、どうしてそれらを入れ子にしますか? 3番目のものが完了するまであなたのUITableViewをリロードしないことがわかります。それが難しい要件の場合、です。

これらが依存している場合、この種のネストは「ピラミッド・オブ・ドゥーム」と呼ばれることがあります。それをクリーンアップするのに最適な方法は、次のことを許可することになる、モナドとしてネストされたコードをラップすることです:

  • コードは、読みやすさを改善し、入れ子になったのではなく、きちんと連鎖させることができます。
  • 繰り返されるエラー処理ではなく、単一のエラー処理を使用できます。
  • 最終的な/常に実行されるタスクはきれいに表現できます。

これはPromiseと呼ばれます。ここに素晴らしいですtutorial on how they work.

そしていくつかの素晴らしいライブラリがあります。 PromiseKitが一般的です。

+0

あなたはそうです - 彼らは間違いなく依存しています。私はあなたの提供したリンクを見て、私は彼らが正しい道のりで私を得るのに十分であると思う。ありがとうジャスパー! – Max

+0

あなたは大歓迎です。 Ray Wenderlichのチュートリアルを使い始めました。具体的なサンプルアプリケーションが付属していますが、試しにFlickr APIキーにサインアップする必要があります。 https://www.raywenderlich.com/145683/getting-started-promises-promisekit –

関連する問題