iOS开发交流学习iOS 进阶

Swift Extension(扩展)

2020-09-30  本文已影响0人  西风那个吹呀吹

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

  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
    }
}

(未完待续)

上一篇下一篇

猜你喜欢

热点阅读