Swift扩展(Extensions)

扩展就是为一个已有的类、结构体、枚举类型或协议类型添加新功能,包括逆向建模(在没有权限获取原始源代码的情况下扩展类型)。和OC不同的是,Swift中的扩展没有名字。

Swift中的扩展可以实现的功能:

  • 添加计算型属性和计算型类型属性
  • 定义实例方法和类型方法
  • 提供新的构造器(只能添加便利构造器)
  • 定义下标
  • 定义和使用新的嵌套类型
  • 使一个已有类型符合某个协议

Swift中,Extensions的特性:

  • Extensions没有名字
  • 可以增加新功能,不能重写已有功能
  • 可以为类添加便利构造器,不能添加指定构造器或析构器
  • 不允许为类型增加存储属性
  • 不允许为已有属性添加属性观察器
  • 允许添加计算型实例属性和计算型类型属性

指定构造器和析构器必须总是由原始的类实现来提供。

如果使用Extension为一个值类型添加构造器,同时该值类型的原始实现中未定义任何定制的构造器且所有存储属性提供了默认值,就可以在Extension的构造器里调用默认构造器和逐一成员构造器。

语法:

1
2
3
extension SomeType{
//为SomeType添加的新功能
}

扩展一个已有类型,使其遵循一个或多个协议:

1
2
3
extension SomeType: SomeProtocol, AnotherProctocol {
// 协议实现
}