【问题标题】:Swift, Wait for two completion blocks to complete before return listSwift,在返回列表之前等待两个完成块完成
【发布时间】:2016-08-21 10:21:08
【问题描述】:

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

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)
    }
}

任何帮助表示赞赏

【问题讨论】:

标签: swift completionhandler


【解决方案1】:

如果 API 不同,您可以尝试this answer。如果您想做两个异步请求,最简单的解决方案是计算请求并检查完成了多少请求(答案中的第一个解决方案)。请记住,响应可以是成功或错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2016-05-08
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    相关资源
    最近更新 更多