Swift扩展

关键词:Swift, iOS, 扩展

概述

  • 可以给一个现有的类,结构体,枚举,协议添加新功能。
  • 不能重写已经存在的功能。
  • 与OC的分类非常相似,只是Swift的扩展没有名字。

Swift 中的扩展可以:

  • 添加计算型实例属性和计算型类属性
  • 定义实例方法和类方法
  • 提供新的构造器
  • 定义下标
  • 定义和使用新的嵌套类型
  • 使已经存在的类型遵循一个协议

使用方法

扩展的声明:

extension SomeType {
  // 在这里给 SomeType 添加新的功能
}

扩充一个现有的类型,并给它添加一个或多个协议:

extension SomeType: SomeProtocol, AnotherProtocol {
  // 协议所需要的实现写在这里
}

示例

增加新功能

extension Int {
    //添加一个计算属性
    var ddName:String {
        return "exName"
    }
    //添加一个函数
    func someFunc() {
        print("在添加的函数里")
    }
    //添加一个修改自身的函数
    mutating func changeNum() {
        self = self * 2
    }
}

添加协议

protocol ExampleProtocol {
    var simpleStr : String { get }
    mutating func simpleFunc()
}

extension Int : ExampleProtocol {
    var simpleStr: String {
        return "这个数字是:\(self)"
    }
    mutating func simpleFunc() {
        self += 10
        print("这是在类型遵循的协议方法里面")
    }
}

构造器相关

  • 可以给现有的类添加便利构造器,但不能添加指定构造器或析构器。
  • 类的指定构造器和析构器,必须由类的原始实现提供。
class FileClass {
    var name: String = "aaa"
    var width: Float = 11
    init(width: Float) {
        self.width = width
    }
}

extension FileClass {
    //添加一个函数
    func showName() {
        print("打印下名称:\(self.name)")
    }
    //添加一个便利构造器
    convenience init(name:String, width:Float) {
        self.init(width:width)
        self.name = name
    }
}