检查 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 是问题的答案:lhsrhs 是相同的 Car 实例吗?

真的有那么复杂吗?

谢谢!

使用标识运算符

static func ==(lhs: Car, rhs: Car) -> Bool {
   return lhs === rhs
}

甚至没有Equatable

myCars.contains{ [=11=] === mazda }

编辑:但更好的解决方案是实现平等而不是身份,例如 vendortype 属性 在 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 的目的不是评估对同一对象的引用。