Swift派生与不派生自NSObject对象之间等于比较的不同

本文简单介绍了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?)

猜你喜欢

转载自blog.csdn.net/mydo/article/details/87857197
今日推荐