- Swift中的擴展,類似OC中的分類Category
- 擴展可以為枚舉、結構體、類、協議添加新功能
可以添加方法、計算屬性、下標、(便捷)初始化器、嵌套類型、協議等
- 擴展不能辦到的事情
- 不能覆蓋原有的功能
OC中是允許覆蓋的,但Swift是安全的,是不允許覆蓋的
- 不能添加存儲屬性
因為存儲屬性會改變內存結構,但擴展是不允許改變原有結構的
- 不能向已有的屬性添加屬性觀察器
- 不能添加父類
也就是不能在擴展后面書寫冒號繼承父類(Extension Car : Person),因為繼承有可能改變原有類的內存結構,父類的成員變量將來在原有類內存中也有份,內存結構就會改變,所以,不能繼承,也就不能添加父類
- 不能添加指定初始化器,不能添加反初始化器
對于Class類來說,指定初始化器是非常重要的,不能額外通過擴展去添加,但可以添加便捷初始化器。
若是Struct結構體類型,不存在指定初始化器和便捷初始化器,沒有這概念,也就可以通過擴展添加成員初始化器。
反初始化器是只能寫在原有類里面的,只能有一個,不能在擴展中添加。
- required初始化器不能寫在擴展中,必須在原有類中
實用案例:
//添加數組下標越界處理的擴展方法
extension Array {
subscript(nullable idx: Int) ->Element? {
if (startIndex ..< endIndex).contains(idx) {
return self[idx]
}
return nil
}
}
(未完待續)