訪問控制可以限定其他源文件或模塊中的代碼對(duì)你的代碼的訪問級(jí)別落塑。這個(gè)特性可以讓我們隱藏代碼的一些實(shí)現(xiàn)細(xì)節(jié),并且可以為其他人可以訪問和使用的代碼提供接口瘸彤。
Swift 中的訪問控制模型基于模塊和源文件這兩個(gè)概念。
模塊:
模塊指的是獨(dú)立的代碼單元,框架或應(yīng)用程序會(huì)作為一個(gè)獨(dú)立的模塊來構(gòu)建和發(fā)布润梯。在 Swift 中,一個(gè)模塊可以使用import關(guān)鍵字導(dǎo)入另外一個(gè)模塊诈豌。
在 Swift 中仆救,Xcode 的每個(gè)目標(biāo)(例如框架或應(yīng)用程序)都被當(dāng)作獨(dú)立的模塊處理。如果你是為了實(shí)現(xiàn)某個(gè)通用的功能矫渔,或者是為了封裝一些常用方法而將代碼打包成獨(dú)立的框架彤蔽,這個(gè)框架就是 Swift 中的一個(gè)模塊。當(dāng)它被導(dǎo)入到某個(gè)應(yīng)用程序或者其他框架時(shí)庙洼,框架內(nèi)容都將屬于這個(gè)獨(dú)立的模塊顿痪。
源文件:
源文件就是 Swift 中的源代碼文件,它通常屬于一個(gè)模塊油够,即一個(gè)應(yīng)用程序或者框架蚁袭。盡管我們一般會(huì)將不同的類型分別定義在不同的源文件中,但是同一個(gè)源文件也可以包含多個(gè)類型石咬、函數(shù)之類的定義揩悄。
訪問級(jí)別:
Swift 為代碼中的實(shí)體提供了五種不同的訪問級(jí)別。這些訪問級(jí)別不僅與源文件中定義的實(shí)體相關(guān)鬼悠,同時(shí)也與源文件所屬的模塊相關(guān)删性。
開放訪問和公開訪問可以訪問同一模塊源文件中的任何實(shí)體亏娜,在模塊外也可以通過導(dǎo)入該模塊來訪問源文件里的所有實(shí)體。通常情況下蹬挺,框架中的某個(gè)接口可以被任何人使用時(shí)维贺,你可以將其設(shè)置為開放或者公開訪問。
內(nèi)部訪問可以訪問同一模塊源文件中的任何實(shí)體巴帮,但是不能從模塊外訪問該模塊源文件中的實(shí)體溯泣。通常情況下,某個(gè)接口只在應(yīng)用程序或框架內(nèi)部使用時(shí)榕茧,你可以將其設(shè)置為內(nèi)部訪問垃沦。
文件私有訪問限制實(shí)體只能被所定義的文件內(nèi)部訪問。當(dāng)需要把這些細(xì)節(jié)被整個(gè)文件使用的時(shí)候雪猪,使用文件私有訪問隱藏了一些特定功能的實(shí)現(xiàn)細(xì)節(jié)栏尚。
私有訪問限制實(shí)體只能在所定義的作用域內(nèi)使用。需要把這些細(xì)節(jié)被整個(gè)作用域使用的時(shí)候只恨,使用文件私有訪問隱藏了一些特定功能的實(shí)現(xiàn)細(xì)節(jié)译仗。
開放訪問(open)和公開訪問(public)的區(qū)別:
開放訪問為最高(限制最少)訪問級(jí)別,私有訪問為最低(限制最多)訪問級(jí)別官觅。
開放訪問只作用于類類型和類的成員(class members)纵菌,它和公開訪問的區(qū)別如下:
公開訪問或者其他更嚴(yán)訪問級(jí)別的類,只能在它們定義的模塊內(nèi)部被繼承休涤。
公開訪問或者其他更嚴(yán)訪問級(jí)別的類成員咱圆,只能在它們定義的模塊內(nèi)部的子類中重寫。
開放訪問的類功氨,可以在它們定義的模塊中被繼承序苏,也可以在引用它們的模塊中被繼承。
開放訪問的類成員捷凄,可以在它們定義的模塊中子類中重寫忱详,也可以在引用它們的模塊中的子類重寫。
把一個(gè)類標(biāo)記為開放跺涤,顯式地表明匈睁,你認(rèn)為其他模塊中的代碼使用此類作為父類,然后你已經(jīng)設(shè)計(jì)好了你的類的代碼了桶错。
//注釋:class members:指定義在類一級(jí)的變量航唆,包括實(shí)例變量和靜態(tài)變量。
訪問控制語法:
通過修飾符open院刁,public糯钙,internal,fileprivate,private來聲明實(shí)體的訪問級(jí)別超营。