首页 > 解决方案 > 在异步方法数之后执行代码

问题描述

假设我有一些类实例的 Int 数组和数组

var IDs = [Int]()
var items = [Item]()

对于 IDs 数组中的每个项目,我想运行异步函数以从服务器请求项目

for id in IDs {
    let item = requestItem(id)
    items.append(item)
}

由于 requestItem 以异步方式工作 - 如何仅在加载所有项目后执行代码?

标签: iosswiftasynchronousgrand-central-dispatch

解决方案


func requestItem(id: Int, completion: @escaping (Item) -> ()) {
    DispatchQueue.global(qos: .background).async {
        let item = Item()
        completion(item)
    }              
}

var IDs = [Int]()
var items = [Item]()

for id in IDs {
    requestItem(id: id) { (derivedItem) in
        items.append(derivedItem)
    }
}

推荐阅读