模塊和源文件
- 模塊指的是獨(dú)立的代碼分發(fā)單元, 框架或應(yīng)用程序會(huì)作為一個(gè)獨(dú)立的模塊來(lái)構(gòu)建和發(fā)布.在
Swift
中, 一個(gè)模塊可以使用import
關(guān)鍵字導(dǎo)入另外一個(gè)模塊. - 源文件就是
Swift
中的源代碼文件, 它通常屬于一個(gè)模塊, 即一個(gè)應(yīng)用程序或者框架. 盡管我們一般會(huì)將不同的類型分別定義在不同的源文件中, 但是同一個(gè)源文件也可以包含多個(gè)類型拒啰、函數(shù)之類的定義.
訪問(wèn)級(jí)別
-
open
: 公開(kāi)權(quán)限, 最高的權(quán)限, 可以被其他模塊訪問(wèn)炒嘲、繼承及復(fù)寫. 只能用于類和類的成員. -
public
: 公有訪問(wèn)權(quán)限, 類或者類的公有屬性或者公有方法可以從文件或者模塊的任何地方進(jìn)行訪問(wèn). 一個(gè)App
就是一個(gè)模塊, 一個(gè)第三方API
、第三方框架等都是一個(gè)完整的模塊, 這些模塊如果要對(duì)外留有訪問(wèn)的屬性或者方法, 就應(yīng)該使用public
的訪問(wèn)權(quán)限.public
的權(quán)限在Swift 3.0
后無(wú)法在其它模塊被復(fù)寫方法/屬性或被繼承. -
internal
: 內(nèi)部, 即有著internal
訪問(wèn)權(quán)限的屬性和方法在模塊內(nèi)部可以訪問(wèn), 超出模塊內(nèi)部就不可被訪問(wèn)了. 在Swift
中默認(rèn)就是internal
的訪問(wèn)權(quán)限. -
fileprivate
: 文件私有訪問(wèn)權(quán)限, 被fileprivate
修飾的類或者類的屬性或方法可以在同一個(gè)物理文件中訪問(wèn). 如果超出該物理文件, 那么有這fileprivate
訪問(wèn)權(quán)限的類帕棉、屬性和方法就不能被訪問(wèn)了. -
private
: 私有訪問(wèn)權(quán)限, 被private
修飾的類或者類的屬性或方法可以在同一個(gè)物理文件中的同一個(gè)類型(包含extension
)訪問(wèn). 如果超出物理文件或不屬于同一類型, 那么有著private
訪問(wèn)權(quán)限的屬性和方法就不能被訪問(wèn).
潛在規(guī)則1
- 如果一個(gè)類的訪問(wèn)級(jí)別是
fileprivate
或private
那么該類的所有成員都是fileprivate
或private
(此時(shí)成員無(wú)法修改訪問(wèn)級(jí)別), 如果一個(gè)類的訪問(wèn)級(jí)別是open
褐桌、internal
或public
那么它的所有成員都是internal
, 類成員的訪問(wèn)級(jí)別不能高于類的訪問(wèn)級(jí)別
注意: 嵌套類型的訪問(wèn)級(jí)別也符合此條規(guī)則
潛在規(guī)則2
- 常量衰抑、變量、屬性荧嵌、下標(biāo)腳本訪問(wèn)級(jí)別低于其所有聲明的類型級(jí)別, 并且如果不是默認(rèn)訪問(wèn)級(jí)別(
internal
)要明確聲明訪問(wèn)級(jí)別
例如一個(gè)常量是一個(gè)
private
類型的類類型, 那么此常量必須聲明為private
或fileprivate
潛在規(guī)則3
- 在不違反
潛在規(guī)則1
和潛在規(guī)則2
的情況下,setter
的訪問(wèn)級(jí)別可以低于getter
的訪問(wèn)級(jí)別.
例如一個(gè)屬性訪問(wèn)級(jí)別是
internal
, 那么可以添加private(set)
修飾將setter
權(quán)限設(shè)置為private
, 在當(dāng)前模塊中只有此源文件可以訪問(wèn), 對(duì)外部是只讀的.
潛在規(guī)則4
- 必要構(gòu)造方法(
required
修飾)的訪問(wèn)級(jí)別必須和類訪問(wèn)級(jí)別相同, 結(jié)構(gòu)體的默認(rèn)逐一構(gòu)造函數(shù)的訪問(wèn)級(jí)別不高于其成員的訪問(wèn)級(jí)別, 其他方法(包括其他構(gòu)造方法和普通方法)的訪問(wèn)級(jí)別遵循潛在規(guī)則1
例如一個(gè)成員是
private
那么這個(gè)構(gòu)造函數(shù)就是private
, 但是可以通過(guò)自定義來(lái)聲明一個(gè)public
的構(gòu)造函數(shù)