在基于1个组件SWIFT的结构数组中查找索引

时间:2017-08-13 21:01:00

标签: arrays swift struct

我有一个Zombies数组,每个Zombie都是一个结构如下:

struct Zombie {
    var number: Int
    var location : Int
    var health : Int
    var uid : String
    var group: Int
}

我有一个Zombies数组

ZombieArray = [Zombie1, Zombie2, Zombie3]

我必须在它变化时更新zombieHealth,但我需要先找到它的Zombie。每个僵尸的位置,号码和UID都是唯一的,因此可以搜索其中的任何一个。这是我尝试过的错误:

let zombieToUpdate : Zombie?

for zombieToUpdate in self.zombieArray {
    if zombieToUpdate.location == thisZombieLocation {
        let indexOfUpdateZombie = zombieArray.indexOf(zombieToUpdate)
        self.zombieArray.remove(at: indexOfUpdateZombie)
        self.zombieArray.append(thisNewZombie)
    }
}

我收到以下错误:

  

无法转换类型' Zombie'预期参数类型'(Zombie)throws - >布尔'

此错误在线上发生:

let indexOfUpdateZombie = zombieArray.indexOf(zombieToUpdate)

1 个答案:

答案 0 :(得分:2)

由于Zombie不符合Equatable,因此您无法使用index(of:)

如果您不想添加该功能,您可以选择实施逻辑。

选项1 - 使用index(where:)

if let index = zombieArray.index(where: { $0.location == thisZombieLocation }) {
    zombieArray.remove(at: index)
    zombieArray.append(thisNewZombie)
}

不需要循环。

选项2 - 使用索引进行迭代:

for index in 0..<zombieArray.count {
    let zombieToUpdate = zombieArray[index]
    if zombieToUpdate.location == thisZombieLocation {
        zombieArray.remove(at: index)
        zombieArray.append(thisNewZombie)
        break // no need to look at any others
    }
}