美文网首页
Swift 扩展 笔记

Swift 扩展 笔记

作者: json_jie | 来源:发表于2017-09-18 10:54 被阅读7次
扩展为现有的类、结构体、枚举类型、或协议添加了新功能

扩展和 Objective-C 中的分类类似。(与 Objective-C 的分类不同的是,Swift 的扩展没有名字。)

Swift 中的扩展可以:

  1. 添加计算实例属性和计算类型属性;
  2. 定义实例方法和类型方法;
  3. 提供新初始化器;
  4. 定义下标;
  5. 定义和使用新内嵌类型;
  6. 使现有的类型遵循某协议

extension 关键字来声明扩展:

extension SomeType {
    //
    // 
}

扩展可以使已有的类型遵循一个或多个协议。在这种情况下,协议名的书写方式与类或结构体完全一样:

extension SomeType: SomeProtocol, AnotherProtocol {
    // implementation of protocol requirements goes here
}

扩展可以为已有的类型添加新的实例方法和类型方法。下面的例子为 Int 类型添加了一个名为 repetitions 的新实例方法:

extension Int {
    func repetitions(task: () -> Void) {
        for _ in 0..<self {
            task()
        }
    }
}

repetitions(task:) 方法接收一个 () -> Void 类型的单一实际参数,它表示一个没有参数且无返回值的函数。

3.repetitions {
    print("Hello!")
}
// Hello!
// Hello!
// Hello!

增加了扩展的实例方法仍可以修改(或异变)实例本身。结构体和枚举类型方法在修改 self 或本身的属性时必须标记实例方法为 mutating ,和原本实现的异变方法一样。

extension Int {
    mutating func square() {
        self = self * self
    }
}
var someInt = 3
someInt.square()
// someInt is now 9
下标
extension Int {
    subscript(digitIndex: Int) -> Int {
        var decimalBase = 1
        for _ in 0..<digitIndex {
            decimalBase *= 10
        }
        return (self / decimalBase) % 10
    }
}
746381295[0]
// returns 5
746381295[1]
// returns 9
746381295[2]
// returns 2
746381295[8]
// returns 7

相关文章

网友评论

      本文标题:Swift 扩展 笔记

      本文链接:https://www.haomeiwen.com/subject/gsivsxtx.html