协议

文章目录
  • 协议中的变量: 属性一律var
  • 协议里面要求的init 刚好是父类实现的init方法,需要required、override。required(来源于协议)和 override(来源于父类)都需要。而, 父类的必要初始化器, 子类实现的时候,可以省略override。
  • 非可失败的初始化器 : 非可失败、 !
  • 可失败: 三种可以
  • 协议组合 &
  • 类型属性必须是static
  • 遍历枚举 CaseIterable allcases
  • CustomStringConvertible description
  • any anyObject 只能被类准守
  • is 判断是否是某种类型 as ? Student 可选项 as Any
  • metadata 元类型
  • Persion.self 和堆空间的前8个字节存储一样的内容 就是元类型
  • Persion.Type
  • AnyClass = AnyObject.type

  • 类名和X.self有很多相同点,可以调用方法,不同点:X.self能赋值给变量,类名不能复制给变量。

  1. 使用元类型调用的初始化方法一定是requied的,因为你可以给元类型传递一个子类的对象,如果子类没有该初始化方法,那么就失败。为了不失败,所以标记为requied
  2. Self 应用于返回值,如果协议中定义的方法返回当前对象,在子类中就需要返回子类对象,所以使用Self