Swift中的代碼訪問權限控制
模塊和源文件
- 模塊指的是獨立的代碼分發(fā)單元唯咬,框架或應用程序會作為一個獨立的模塊來構(gòu)建和發(fā)布纱注。在Swift中,一個模塊可以使用import關鍵字導入另外一個模塊
- 源文件就是Swift中的源代碼文件胆胰,它通常屬于一個模塊狞贱,即一個應用程序或者框架。盡管我們一般會將不同的類型分別定義在不同的源文件中蜀涨,但是同一個源文件也可以包含多個類型瞎嬉、函數(shù)之類的定義
訪問級別
潛規(guī)則1
- 如果一個類的訪問級別是fileprivate或private那么該類的所有成員都是fileprivate或private(此時成員無法修改訪問級別),如果一個類的訪問級別是open厚柳、internal或者public那么它的所有成員都是internal氧枣,類成員的訪問級別不能高于類的訪問級別(注意:嵌套類型的訪問級別也符合此條規(guī)則)
潛規(guī)則2
- 常量、變量别垮、屬性便监、下標腳本訪問級別低于其所聲明的類型級別,并且如果不是默認訪問級別(internal)要明確聲明訪問級別(例如一個常量是一個private類型的類類型宰闰,那么此常量必須聲明為private或fileprivate)
潛規(guī)則3
- 在不違反1茬贵、2兩條潛規(guī)則的情況下簿透,setter的訪問級別可以低于getter的訪問級別(例如一個屬性訪問級別是internal移袍,那么可以添加private(set)修飾將setter權限設置為private,在當前模塊中只有此源文件可以訪問老充,對外部是只讀的)
潛規(guī)則4
- 必要構(gòu)造方法(required修飾)的訪問級別必須和類訪問級別相同葡盗,結(jié)構(gòu)體的默認逐一構(gòu)造函數(shù)的訪問級別不高于其成員的訪問級別(例如一個成員是private那么這個構(gòu)造函數(shù)就是private,但是可以通過自定義來聲明一個public的構(gòu)造函數(shù))啡浊,其他方法(包括其他構(gòu)造方法和普通方法)的訪問級別遵循潛規(guī)則1
怎樣創(chuàng)建一個模塊
- 這里新建一個模塊后觅够,創(chuàng)建一個Human類
這里沒有導入Teacher
如果在其他模塊想用Human,需要將Human的類用public修飾
如果在外邊繼承Human, 也不行巷嚣,public等級不行
這里需要將Human的等級修改為open
另外喘先,結(jié)構(gòu)體沒有open權限,結(jié)構(gòu)體只能用public
如果父類是fileprivate, 那么子類也必須是
上面的錯誤是HumanSex是內(nèi)嵌類廷粒,并用private修飾窘拯,那么超出{}后, 則不能訪問
如果屬性繼承于private坝茎,那么該屬性也必須聲明為private
注意此時涤姊,外部訪問不到age屬性