swift中的!=

我们知道在swift如果定义的struct model需要实现Equatable协议中的==操作符,一个最简单的例子:

Paste_Image.png

那么如果是Class呢?

Paste_Image.png

貌似也没问题。如果这个类继承自NSObject呢?

Paste_Image.png

好了,第一个问题出现了,这个很简单,因为NSObject已经遵循了Equatable协议,所以编译器会提示多余操作,直接删除这行。

Paste_Image.png

应该就可。。。

Paste_Image.png

WTF,a != b竟然也是true?

不是已经指明了只要lhs.name == rhs.name就算相等了吗?

难道编译器没有为我们实现!=操作符,而直接使用了父类的!=操作符?我们来添加一个!=验证一下。

Paste_Image.png

终于对了,看来在子类中没有实现!=操作符会直接使用父类的,此处的父类为NSObject,而它的取等运算使用的是hash值,那么两个对象!=会返回true。

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 定义: 协议定义了一个蓝图,规定了用来实现某一特定的任务或者功能的方法、属性,或其他需要的东西。类、结构体、枚举都...
    geekLiu阅读 5,307评论 0 1
  • 1、随机数 不需要随机数种子 arc4random()%N + begin:产生begin~begin+N的随机数...
    我是小胡胡123阅读 9,754评论 0 2
  • 一、类的介绍和定义 Swift也是一门面向对象开发的语言,面向对象的基础是类,类产生了对象; 在Swift中定义类...
    magic_pill阅读 4,030评论 0 1
  • 类型 在Swift中,有两种类型:命名型类型和复合型类型。命名型类型是在定义时可以给定的特定名字的类型。命名型类型...
    silly鸿阅读 3,952评论 0 0
  • Swift2.0 1.defer译为延缓、推迟之意类似栈 注意作用域,其次是调用顺序——即一个作用域结束(注意),...
    zeqinjie阅读 8,651评论 0 50