Swift Extension(扩展)

作者: 西风那个吹呀吹 | 来源:发表于2020-09-30 13:06 被阅读0次
    • Swift中的扩展,类似OC中的分类Category
    • 扩展可以为枚举、结构体、类、协议添加新功能

    可以添加方法、计算属性、下标、(便捷)初始化器、嵌套类型、协议等

    • 扩展不能办到的事情
    1. 不能覆盖原有的功能

    OC中是允许覆盖的,但Swift是安全的,是不允许覆盖的

    1. 不能添加存储属性

    因为存储属性会改变内存结构,但扩展是不允许改变原有结构的

    1. 不能向已有的属性添加属性观察器
    2. 不能添加父类

    也就是不能在扩展后面书写冒号继承父类(Extension Car : Person),因为继承有可能改变原有类的内存结构,父类的成员变量将来在原有类内存中也有份,内存结构就会改变,所以,不能继承,也就不能添加父类

    1. 不能添加指定初始化器,不能添加反初始化器

    对于Class类来说,指定初始化器是非常重要的,不能额外通过扩展去添加,但可以添加便捷初始化器。
    若是Struct结构体类型,不存在指定初始化器和便捷初始化器,没有这概念,也就可以通过扩展添加成员初始化器。
    反初始化器是只能写在原有类里面的,只能有一个,不能在扩展中添加。

    1. required初始化器不能写在扩展中,必须在原有类中

    实用案例:

    //添加数组下标越界处理的扩展方法
    extension Array {
        subscript(nullable idx: Int) ->Element? {
            if (startIndex ..< endIndex).contains(idx) {
                return self[idx]
            }
            return nil
        }
    }
    

    (未完待续)

    相关文章

      网友评论

        本文标题:Swift Extension(扩展)

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