21. 扩展

文章目录
  1. 1. Extension 语法
  2. 2. 计算属性
  3. 3. 初始化器
  4. 4. 方法
    1. 4.1. 可变实例方法
  5. 5. 下标
  6. 6. 嵌套类型
  1. Extension Syntax
  2. Computed Properties
  3. Initializers
  4. Methods
  5. Subscripts
  6. Nested Types

Extensions :为已存在的类、结构体、枚举或者协议类型增添了一个新的功能。这项功 能包括在对你无法访问源码的情况下进行类的扩展的能力(例如“追溯模型”)。Swift 中的Extensions 与 Objective-C 中的 Categories 类似。(但与 Objective-C 中 Categories 有所不同的是,Swift 中的 Extensions 并没有一个具体的命名)
在 Swift 中 Extensions 可以做到:

  1. 添加计算实例属性和计算类型属性
  2. 定义实例方法和类方法
  3. 提供新的初始化方法
  4. 定义下标脚本
  5. 定义和使用新的嵌套类型
  6. 使现有类型符合协议

注意: Extensions 可以为类增添一个新的功能,但却不能重写之前已经存在的功能。

Extension 语法

使用关键字 Extension 来声明一个扩展:

1
2
3
extension SomeType {
//编写 SomeType 的新功能
}

注意:如果你想为一个已经存在的类型的进行扩展并添加一个新的功能,那么这个功能将会被 该类所有的实例使用,即使在这个 Extension 被定义之前。

计算属性

Extensions 可以将计算实例属性与计算类型属性添加到现有类中去。

注意:Extensions 可以添加一个新的属性,但是他们不能存储这些属性,也不能为现有类 型添加属性观察者。

初始化器

Extensions 可以给类添加一个便利初始化器,但它们不能够提供指定初始化器、反初始化器。指定初始化器和反初始化器都必须由原始类去提供。

注意: 如果你声明了一个带有扩展的新的初始化器,那么你仍然有责任去确认在这个初始化器完成之后,每一个实例都已经被初始化完成。

方法

扩展可以向已经存在的类型添加实例方法或类方法。

可变实例方法

我们可以通过在扩展中添加实例方法来实现修改变量。

下标

Extensions 能够对已经存在的类型添加下标。

嵌套类型

我们可以通过扩展 Extensions 来向任何已经存在的类、结构体或枚举添加新的嵌套类 型。