本文简单介绍了Swift中派生与不派生自NSObject的类,在等于比较时表现出的不同行为;还顺带讨论了创建大数组时效率的问题.
等于或不等于
我们知道对于数组的比较来说,实际比较的是它们中的每一个对应位置上元素.
所以最终都是要比较对象的.
我们还知道对于Swift中的类来说,要实现==操作符,需要遵守Equatable协议,并实现==方法.
比如对于类A来说:
class A:NSObject{
var name:String
var id:Int
init(name:String,id:Int){
self.name = name
self.id = id
}
convenience override init() {
self.init(name: "", id: 0)
}
}
要实现如下方法:
static func ==(lhs:A,rhs:A)->Bool{
if lhs.name == rhs.name,lhs.id == rhs.id{
return true
}
return false
}
派生自NSObject的时候
一般情况下,上面的讨论无疑是正确,但同时却是不严谨的!
why???
因为当A继承自NSObject时,在做等于比较时不会调用==方法!
它会调用另一个方法:isEqual()
它的实现很简单:
override func isEqual(_ object: Any?)