1.swift類的構造器
? swift構造器有三種:指定構造器和, 便利構造器, 默認構造器. 其中用'convenience'修飾的構造器為便利構造器, 繼承自父類的構造器及swift自動提供的構造器為默認構造器, 其他為指定構造器. 指定構造器一般只有一個, 也可以有多個.
? 所有便利構造器內部都必須調用本類的便利構造器或指定構造器, 但最終要調用本類指定構造器
? 當子類有異于父類的構造器時(一般是指定構造器, 因為子類的便利構造器最終都要調用子類的指定構造器), 子類中所有的默認構造器不可用.
??為什么swift要在以上情況下強制默認構造器不可用呢?
聲明一個屬性時不設置默認值, 就必須在構造器中設置
即初始化前所有屬性都必須要有一個值(特殊情況除外, 如lazy, 可選類型等)
如果子類實現了自己的指定構造器, 很可能是為了初始化子類獨有的屬性, 那么父類的構造器就不適合子類了, 所以就強制不可用.
但是有些構造器是有獨特的作用的, 比如init?(coder aDecoder: NSCoder)方法, 于是父類用required修飾這個構造器, 需要程序猿必須要實現.
至于init?(coder aDecoder: NSCoder)是干什么用的, 呵呵, 一直在用loadNibNamed方法的我也有點蒙圈......
2.swfit只讀屬性
?setter getter方法重寫如圖, 如果只有get沒有set就是只讀屬性, 但是有set的話就必須要有get
3.你不可以為繼承來的常量存儲型屬性或繼承來的只讀計算型屬性添加屬性觀察器。這些屬性的值是不可以被設置的,所以愉镰,為它們提供
willSet
或didSet
實現是不恰當。此外還要注意髓窜,你不可以同時提供重寫的 setter 和重寫的屬性觀察器。如果你想觀察屬性值的變化欺殿,并且你已經為那個屬性提供了定制的 setter寄纵,那么你在 setter 中就可以觀察到任何值變化了。3.swift 訪問權限
1脖苏、private
private訪問級別所修飾的屬性或者方法只能在當前類里訪問程拭。
2、fileprivate
fileprivate訪問級別所修飾的屬性或者方法在當前的Swift源文件里可以訪問帆阳。
3哺壶、internal(默認訪問級別屋吨,internal修飾符可寫可不寫)
internal訪問級別所修飾的屬性或方法在源代碼所在的整個模塊都可以訪問蜒谤。
如果是框架或者庫代碼,則在整個框架內部都可以訪問至扰,框架由外部代碼所引用時鳍徽,則不可以訪問。
如果是App代碼敢课,也是在整個App代碼阶祭,也是在整個App內部可以訪問。
4直秆、public
可以被任何人訪問濒募。但其他module中不可以被override和繼承,而在module內可以被override和繼承圾结。
5瑰剃,open
可以被任何人使用,包括override和繼承筝野。
訪問順序:
現在的訪問權限則依次為:open晌姚,public粤剧,internal,fileprivate挥唠,private抵恋。
需要說明的是, 對類/結構體使用低訪問權限, 類/結構體的屬性依舊可以使用高權限修飾. 當然, 一般類如果不能訪問, 其屬性也不能訪問.
- 任何屬性或類的權限, 不得高于其類型或父類的權限
- 任何方法, 其權限不高于其參數與返回值類型的訪問權限
有錯望指正, 謝謝.