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