【发布时间】:2020-02-07 16:29:10
【问题描述】:
我使用了一个调度组wait(),它阻止我的for循环完成代码,直到完成一组urlsession任务(在另一个带有完成处理程序的循环中),然后再将新元素附加到我的数组
当前代码将在urlClass.selectfoodURL的第二个循环完成之前完成第一个循环
我想在我的 urlfood for 循环完成后将数组附加到膳食历史中
我使用调度组的方法中的一个问题是wait(),当我选择的食物被称为urlsession 卡住并且没有以group.wait 完成时
func userSnackHistoryArray() {
let group = DispatchGroup()
let Arrays // array of dictionary
for array in Arrays {
var generateMeal = MealDetails() // struct type
do {
let aa = try JSONDecoder().decode(userSnack.self, from: array)
generateMeal.names = convertToJsonFile.type
for name in generateMeal.names!{
group.enter()
urlClass.selectfoodURL(foodName: name){ success in
generateMeal.units!.append(allVariables.selectedUnit)
group.leave()
}
}
// my select food is called but the urlsession stuck and doesnt complete with group.wait is active
// group.wait()
mealHistory.append(generateMeal)
} catch { }
}
group.notify(queue: .main){
print("complete")
}
}
我已缩短代码以专注于问题,我可以将代码拆分为两个函数并解决问题,但我只想使用一个函数 有什么建议或想法吗?
【问题讨论】:
标签: swift httprequest grand-central-dispatch swift5 urlsession