7.8 知识拓展

7.8 知识拓展

在Objective-C的世界里,NSObject是所有类的基类,如果要将Swift和Objective-C混合进行iOS的开发,有时候会不可避免地需要声明继承自NSObject的类。这个基类是满足NSObjectProtocol协议的,所以提供了很多属性和方法。读者可以通过查看NSObject的定义找到NSObjectProtocol。源码定义如下:

这里需要读者先认识一个符号——“`”,在Swift或者Objective-C的世界中,如果方法或者变量使用了关键字,可以使用“`”符号括起来,那么在使用时就可以按定义的名称使用,不过本书还是建议读者不要用关键字作为方法或者变量的名字。NSObjectProtocol中值得一提的是isEqual和hash方法,在Objective-C中它们是一个实例进行相等和同一判断的基础。重写isEqual方法之后可以对自定义的类型进行是否相等的判断,hash则可以用作字典或者集合中标识实例的一个数值。而NSObject本身也提供了一些属性和方法,源码定义如下:

继承自NSObject类的自定义类,如果覆写了description方法,那么在print时会自动将description的返回打印出来。结合NSObjectProtocol和NSObject,我们可以简单地实现打印和相等的判断,示例如下:

动手写7.8.1 NSObject

控制台输出如下: