美文网首页
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