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

(未完待續)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。