在Swift中,如果我想检查数组中是否有一个对象(比一个字符串更复杂的对象),我该怎么做?在这样的页面上找到的答案(How to check if an element is in an array)似乎不适合我。
例如,如果我有一个Dogs的对象类,其中每只狗都有多个属性(如重量,颜色,品种等)......我创建了该类的几个实例并将它们附加到单个数组中...那我怎么能检查一下这个数组中是否有某个物体?
if singleDogInstance is in arrayOfDogs {
//do something
}
答案 0 :(得分:1)
只要数组中包含的元素符合contains
协议,您就可以使用Swift库中的Equitable
函数,这基本上要求您创建全局==
操作比较你班级的两个实例。
struct Dog: Equatable {
let name: String
}
func ==( lhs: Dog, rhs: Dog ) -> Bool {
return lhs.name == rhs.name
}
let arrayOfDogs = [ Dog( name:"Panzer" ), Dog( name:"Bentley" ), Dog( name:"Ewok" ) ]
let singleDogInstance = arrayOfDogs[0]
print( contains( arrayOfDogs, singleDogInstance ) ) // True
let someOtherDog = Dog( name:"Oliver" )
print( contains( arrayOfDogs, singleDogInstance ) ) // False
当然,在Swift 2.0中,contains
函数不再是全局函数,而是Array
的一部分:
arrayOfDogs.contains( singleDogInstance )