在我的快速游戏中,我循环遍历每个帧运行的2个数组(spritekit),如此
override func update(currentTime: CFTimeInterval) {
for (i, value) in enumerate(presents) {
for (ii, pvalue) in enumerate(portals) {
if(blah == true) {
presants.removeAtIndex(i)
}
//There is also some code that waits 1 second then runs
portals.removeAtIndex(ii)
}
}
}
正如你在内环中看到的,我有时会删除。但这有时会因错误而崩溃,致命错误:数组索引超出范围,我不确定这是怎么回事。我的2个理论是1.因为它运行每一帧而且有一个延迟它可能已经在下一个循环中被删除或2.由于循环迭代我从循环中删除的数组可能在它被删除后不会重置。我可以使用try catch(Pure swift no Obj-C),但是所有的例子都是为了抛出错误我想忽略它们。
所以我的问题是:我可以重置循环,还是可以在纯swift中实现try catch?
答案 0 :(得分:1)
在迭代它们时,您正在从集合中删除项目。不要这样做。相反,您可以收集要在数组中删除的索引,然后在完成上述循环后以相反的顺序(从最大到最小)删除它们。