2016-08-21 84 views
1

我试图调用两个单独的api端点来返回一些json,两个调用将对象添加到列表中...我如何等待这两个funcs该列表返回到视图控制器Swift,在返回列表之前等待两个完成块完成

import Alamofire 
import SwiftyJSON 

class SearchService { 

var searchItemList = [SearchItem]() 

func performFetch(keyword: String, count: Int, completion:(items: [SearchItem]?) ->()){ 
    >>>// NEED TO WAIT FOR THE fetchItemsA AND fetchItemsB TO FINISH THEM RETURN ‘searchItemList’ 
} 

func fetchItemsA(keyword: String, count: Int, completion:(error:NSError?) ->()) { 
    guard let url = self.searchUrl else { 
     return 
    } 

    let manager = Manager.sharedInstance 
     manager.request(.GET, url, parameters: ["keywords": keyword, "count": count], encoding: ParameterEncoding.URL) 
      .validate() 
      .responseJSON {response in 

     … 

     for item in items { 
      self.searchItemList.append(SearchItem(json: item)!) 
     } 

     … 
     completion(error: resultError) 
} 

func fetchItemsB(keyword: String, count: Int, completion:(error:NSError?) ->()) { 
    guard let url = self.searchUrl else { 
     return 
    } 

     let manager = Manager.sharedInstance 
      manager.request(.GET, url, parameters: ["keywords": keyword, "count": count], encoding: ParameterEncoding.URL) 
      .validate() 
      .responseJSON {response in 

    … 

    for item in items { 
     self.searchItemList.append(SearchItem(json: item)!) 
    } 

    … 
      completion(error: resultError) 
    } 
} 

任何帮助表示赞赏

+0

难道你不能把搜索谓词结合起来使用**一个** API调用吗? – vadian

+0

干杯@vadin,你让我想... http://stackoverflow.com/q/28791349/4154338 – rogger2016

回答

1

之前完成。如果API是不同的,你可以尝试this answer。如果您想要执行两个异步请求,最简单的解决方案就是对请求进行计数并检查完成了多少请求已完成(答案中的第一个解决方案)。请记住,回应可能是成功或错误。