Swift Extension(扩展)

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

(未完待续)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。