Swift中self、Any等关键字和Runtime特性

149 阅读1分钟

self和Any等关键字

  1. T.self:T是实例对象,当前T.self返回的就是本身,如果T是类,T.self返回的就是元类型

  2. AnyObject:任意类型,不能表示基本类型

  3. Any:代表任意类型,包括funcation类型和Optional类型

  4. AnyClass:代表任意实例的类型

  5. id:早期等同于AnyObject,现在等同于Any

  6. type(of:T):等同于Self 获取一个类的动态类型

Swift Runtime特性

  1. 对于纯Swift类来说,方法和属性不加任何修饰符的情况下。这个时候不具备Runtime特性

  2. 对于纯Swift类,方法和属性添加@objc标识的情况下,当我们可以通过Runtime API拿到,但是在OC中是没法进行调度的

  3. 对于继承自NSObject类来说,如果想动态获取当前的属性和方法,必须在其声明前加上@objc关键字,否则也是没有办法通过Runtime API获取的

  4. 纯Swift类没有动态性,但在方法、属性前添加dynamic修饰,可获得动态性

  5. 继承自NSOject的swift类,其继承父类的方法具有动态性,其它自定义方法、属性想要获取动态性,需添加dynamicw修饰

  6. 若方法的参数、属性类型为swift特有、无法映射到objective-c的类型(如Character、Tuple),则此方法、属性无法添加dynamic修饰(编译器报错)