检查Swift数组是否包含object的实例



如何检查Swift数组是否包含对象的特定实例?考虑这个简单的例子:

class Car {}
let mazda = Car()
let toyata = Car()
let myCars = [mazda, toyata]
myCars.contains(mazda) // ERROR!

我的调查让我得出结论,Car类必须采用Equatable协议。似乎是这样的:

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

myCars.contains(mazda)确实返回true

然而,==的实现显然不是我想要的。我真正希望它返回的是这个问题的答案:lhsrhs是相同的Car实例吗?

真的那么复杂吗?

谢谢!

=== 
Swift中的

操作符检查两个对象引用是否都指向同一个对象实例。

那么你的Equatable可以是这样的:

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

我建议而不是使用这种方法。Equatable的目的不是计算对同一对象的引用。

使用标识符

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

或者没有Equatable

myCars.contains{ $0 === mazda }
编辑:但一个更好的解决方案是实现平等而不是身份,例如vendortype属性在类
static func ==(lhs: Car, rhs: Car) -> Bool {
   return lhs.vendor == rhs.vendor && lhs.type == rhs.type
}

最新更新