Swift - 在for循环中展开选项值时为零

时间:2016-11-18 14:30:31

标签: ios swift

我正在使用以下代码删除游戏中所有死亡的射弹物体,它的效果非常好,但是随机时间它会崩溃并突出显示指示行并发出此致命错误:

  

致命错误:在展开Optional值(lldb)时意外发现nil

这是我正在使用的代码,错误在第4行

projs.removeAtIndex(...)

if (Projectile.deadProjs.isEmpty == false && Projectile.projs.isEmpty==false) {
    for i in 0...Projectile.deadProjs.count - 1 {            
        Projectile.projs.removeAtIndex(Projectile.projs.indexOf(Projectile.deadProjs[i])!);
    }
    Projectile.deadProjs.removeAll();
}

1 个答案:

答案 0 :(得分:4)

尝试这样做:

if (Projectile.deadProjs.isEmpty == false && Projectile.projs.isEmpty==false) {
   for i in 0...Projectile.deadProjs.count - 1 {
      if let deadProjIdx = Projectile.projs.indexOf(Projectile.deadProjs[i]) {
         Projectile.projs.removeAtIndex(deadProjIdx);
      }
   }

   Projectile.deadProjs.removeAll();
}

编辑2次: 甚至更好:

if !Projectile.deadProjs.isEmpty && !Projectile.projs.isEmpty {
   for deadPrj in Projectile.deadProjs {
      if let deadProjIdx = Projectile.projs.indexOf(deadPrj) {
         Projectile.projs.removeAtIndex(deadProjIdx)
      }
   }

   Projectile.deadProjs.removeAll()
}