2017-05-21 4 views
1

같은 API에 세 가지 다른 요청을해야합니다. 이 호출 중 어느 것도 다른 호출에 의존하지 않습니다. 나는이 느낌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

아무 작업도 종속되지 않는 경우 왜 중첩합니까? 세 번째 것이 완료 될 때까지 UITableView를 다시로드하지 않는다는 것을 알 수 있습니다. 어려운 요구 사항 인 경우 입니다.

종속성이있는 경우 이러한 종류의 중첩을 '운명의 피라미드'라고도합니다.

  • 코드 가독성을 향상 깔끔하게 체인보다는 중첩 될 수 있습니다 : 그것을 청소하는 가장 좋은 방법은 다음과 허용 것이다, 모나드로 중첩 된 코드를 래핑하는 것입니다.
  • 반복적 인 오류 처리 대신 하나의 오류 처리를 사용할 수 있습니다.
  • 최종/항상 작업을 깔끔하게 표현할 수 있습니다.

이것을 약속이라고합니다. 여기에 우수함이 있습니다. tutorial on how they work.

그리고 훌륭한 라이브러리가 있습니다. PromiseKit은 인기있는 제품입니다.

+0

당신 말이 맞습니다 - 그들은 분명히 의존합니다. 나는 당신이 제공 한 링크를 들여다 보았다. 나는 그들이 나를 올바른 길로 인도하기에 충분하다고 생각한다. 재스퍼에게 감사드립니다! – Max

+0

당신은 환영받는 친구입니다. Ray Wenderlich의 튜토리얼을 사용하여 시작했습니다. 구체적인 샘플 앱과 함께 제공되었지만 Flickr API 키를 등록해야만 사용할 수 있습니다. https://www.raywenderlich.com/145683/getting-started-promises-promisekit –