检查 Swift 数组是否包含对象实例
Check if Swift array contains instance of object
如何检查 Swift 数组是否包含对象的特定实例?考虑这个简单的例子:
class Car {}
let mazda = Car()
let toyata = Car()
let myCars = [mazda, toyata]
myCars.contains(mazda) // ERROR!
我的调查让我得出结论,Car
class 必须采用 Equatable
协议。好像是这样的:
class Car: Equatable {
static func ==(lhs: Car, rhs: Car) -> Bool {
return true
}
}
那么myCars.contains(mazda)
确实returntrue
.
然而==
的实现显然不是我想要的。我真正想要的 return 是问题的答案:lhs
和 rhs
是相同的 Car
实例吗?
真的有那么复杂吗?
谢谢!
使用标识运算符
static func ==(lhs: Car, rhs: Car) -> Bool {
return lhs === rhs
}
甚至没有Equatable
myCars.contains{ [=11=] === mazda }
编辑:但更好的解决方案是实现平等而不是身份,例如 vendor
和 type
属性 在 class
static func ==(lhs: Car, rhs: Car) -> Bool {
return lhs.vendor == rhs.vendor && lhs.type == rhs.type
}
===
Swift 中的运算符检查两个对象引用是否都指向同一个对象实例。
因此您的 Equatable
可能如下所示:
static func ==(lhs: Car, rhs: Car) -> Bool {
return lhs===rhs
}
我不推荐这种方法。 Equatable
的目的不是评估对同一对象的引用。
如何检查 Swift 数组是否包含对象的特定实例?考虑这个简单的例子:
class Car {}
let mazda = Car()
let toyata = Car()
let myCars = [mazda, toyata]
myCars.contains(mazda) // ERROR!
我的调查让我得出结论,Car
class 必须采用 Equatable
协议。好像是这样的:
class Car: Equatable {
static func ==(lhs: Car, rhs: Car) -> Bool {
return true
}
}
那么myCars.contains(mazda)
确实returntrue
.
然而==
的实现显然不是我想要的。我真正想要的 return 是问题的答案:lhs
和 rhs
是相同的 Car
实例吗?
真的有那么复杂吗?
谢谢!
使用标识运算符
static func ==(lhs: Car, rhs: Car) -> Bool {
return lhs === rhs
}
甚至没有Equatable
myCars.contains{ [=11=] === mazda }
编辑:但更好的解决方案是实现平等而不是身份,例如 vendor
和 type
属性 在 class
static func ==(lhs: Car, rhs: Car) -> Bool {
return lhs.vendor == rhs.vendor && lhs.type == rhs.type
}
===
Swift 中的运算符检查两个对象引用是否都指向同一个对象实例。
因此您的 Equatable
可能如下所示:
static func ==(lhs: Car, rhs: Car) -> Bool {
return lhs===rhs
}
我不推荐这种方法。 Equatable
的目的不是评估对同一对象的引用。