Introducing Swift - Extensions
本文主要记录在学习Swift中【扩展】时的笔记。
扩展允许我们在没有源码的情况下对一个类或者类型进行行为和属性上的扩充或者更改,和OC不同的是,Swift中的扩展没有名字。
能力范围
- 添加计算型属性和计算静态属性
- 定义实例方法和类型方法
- 提供新的构造器
- 定义下标
- 定义和使用新的嵌套类型
- 使一个已有类型符合某个接口
扩展语法
extension SomeClass {
// add new things ...
}
extension SomeClass: NewProtocol {
// new protocol implementation ...
}
注意:扩展不能添加存储属性,也不能向已有属性添加属性观测器。
构造器
如果你使用扩展向一个值类型添加一个构造器,该构造器向所有的存储属性提供默认值,而且没有定义任何定制构造器(custom initializers),那么对于来自你的扩展构造器中的值类型,你可以调用默认构造器(default initializers)和成员级构造器(memberwise initializers)。 正如在值类型的构造器授权中描述的,如果你已经把构造器写成值类型原始实现的一部分,上述规则不再适用。
如果你使用扩展提供了一个新的构造器,你依旧有责任保证构造过程能够让所有实例完全初始化。
修改实例方法
通过扩展添加的实例方法也可以修改该实例本身。结构体和枚举类型中修改self或其属性的方法必须将该实例方法标注为mutating
,正如来自原始实现的修改方法一样。