Swift

背景

我们写一个类或者协议的时候经常会继承一个基类,然而什么时候该继承哪个基类呢,OC 与Swift 的基类又有哪些区别和联系呢,今天带大家看看这几个基础的知识。

AnyObject与NSObject

AnyObject

首先我们看看Swift里的AnyObject:
AnyObject是 Swift对Objective-C id类型的表示.它比NSObject更通用(即每个NSObject都 是AnyObject,但不是每个AnyObject都是NSObject).

是什么

类型别名

定义

所有类隐式遵守的协议

用处

需要没有明确类型的灵活对象或桥接返回非明确类型结果的 Objective-C 方法和属性时,可以使用 AnyObject。AnyObject 可以用作任何类实例、类或仅用于类的协议。
AnyObject 还可以用作桥接到 Objective-C 类的类型实例的具体类型。Swift 中的许多值类型会桥接到 Objective-C 对应项,如 String 和 Int

let s: AnyObject = "This is a bridged string." as NSString
print(s is NSString)
// Prints "true"

AnyObject协议的灵活行为类似于Objective-C的id类型。因此,导入的 Objective-C 类型经常使用 AnyObject 作为属性、方法参数和返回值的类型。

NSObject

NSObject是所有 Objective-C 对象的基础方法组。

是什么

是一个类

定义

大多数 Objective-C 类层次结构的根类,子类从中继承到运行时系统的基本接口以及作为 Objective-C 对象运行的能力。

重点:

它以 NSObjectProtocol 的名称导入到 Swift 中。换言之,Cocoa 根类 NSObject 采用NSObjectProtocol 协议,因此从 NSObject 继承的所有对象都具有此协议所描述的功能。

用处

符合此协议的对象可以被视为一级对象。这样的对象可以查询一下的信息:

  • 它的类型,以及其类在继承层次结构中的位置。
  • 是否符合某个协议。
  • 能够响应特定消息。

总结

当我们在swift里要处理OC的id类型的参数或者返回值,亦或我们要实现一个只有类可以遵循的协议的时候要用AnyObject。在Swift里如果要继承NSObject的RunTime等特性时候,需要使用NSObjectProtocol它就是NSObject的Swift导入名称。这么一看大家就知道平时该怎么用了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容