我有一个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)
答案 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
}
}