Swift

作者: 今天写明天改 | 来源:发表于2022-08-14 16:59 被阅读0次

背景

我们写一个类或者协议的时候经常会继承一个基类,然而什么时候该继承哪个基类呢,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导入名称。这么一看大家就知道平时该怎么用了。

相关文章

网友评论

      本文标题:Swift

      本文链接:https://www.haomeiwen.com/subject/pikhgrtx.html