好吧,在Swift 2.0中为NSObject子类编写自己的equals运算符时会发生一些奇怪的事情,如下所示:
func ==(lhs: MyObject, rhs: MyObject) -> Bool {
return lhs.identifier == rhs.identifier
}
Run Code Online (Sandbox Code Playgroud)
对于看起来像这样的类:
class MyObject: NSObject {
let identifier: String
init(identifier: String) {
self.identifier = identifier
}
}
Run Code Online (Sandbox Code Playgroud)
这曾经在Swift 1.2及以下版本中运行得很好.它仍然有点工作:
let myObject1 = MyObject(identifier: "A")
let myObject2 = MyObject(identifier: "A")
let result = (myObject1 == myObject2)
// result is true
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都那么好,但是如果两个变量都是可选项呢?
let myObject1: MyObject? = MyObject(identifier: "A")
let myObject2: MyObject? = MyObject(identifier: "A")
let result = (myObject1 == myObject2)
// result is false, equals operator was never …Run Code Online (Sandbox Code Playgroud)