如何在For / In循环中实现完成处理程序? 我有一个名为 phonesArray 的两个CNLabeledContact数组:
var myPhoneNumberArray = CNLabeledValue
for item in phonesArray {
let phonesArrayValue = item.value as! CNPhoneNumber
let phonesArrayValueDigits = phonesArrayValue.valueForKey("digits")!
print("current value: \(phonesArrayValueDigits)") //
DataService.dataService.checkIfPhoneExistsInDatabase("\(phonesArrayValueDigits)") { (bool) in
if bool {
print("append this item")
self.myPhoneNumberArray.append(item)
}
else {
}
}
}
print("My phonenumbers array is:")
print(myPhoneNumberArray)
这,打印,打印:
current value: 37439
current value: 78735
My phonenumbers array is:
[]
append this item //Only the second number matches the database and is appenned
我想:
current value: 37439
Current value: 78735
append this item
[<CNLabeledValue:....digits=78735>>]
答案 0 :(得分:1)
看起来好像checkIfPhoneExistsInDatabase
在做异步工作。因此,其余代码可以在完成处理程序之前,之后或之间的任何时间运行。
因此,如果您的DataService
实例未提供同步操作或某些同步,则必须在完成块中手动执行该作业。您的主要兴趣点是检查是否所有项目都已处理完毕。关注比赛条件。
另一个想法是序列化查询,基本上将循环拉入完成处理程序:只对第一个元素执行查询,并在块中查询下一个元素的数据,依此类推。