在了解Swift中的權(quán)限關(guān)鍵字之前我們需要知道模塊和源文件兩個(gè)概念:
1.模塊指的是獨(dú)立地代碼分發(fā)單元渐溶,框架或應(yīng)用程序會作為一個(gè)獨(dú)立的模塊來構(gòu)建和發(fā)布。在 Swift 中,一個(gè)模塊可以使用 import 關(guān)鍵字導(dǎo)入另外一個(gè)模塊。
2.源文件就是 Swift 中的源代碼文件,它通常屬于一個(gè)模塊叉趣,即一個(gè)應(yīng)用程序或者框架泞边。盡管我們一般會將不同的類型分別定義在不同的源文件中,但是同一個(gè)源文件也可以包含多個(gè)類型疗杉、函數(shù)之類的定義阵谚。
Swift 中有個(gè)5個(gè)級別的訪問控制權(quán)限,從高到低依次是 open, public, internal, fileprivate, private
open: 最高的權(quán)限,可以被其他模塊訪問烟具,繼承及重寫梢什。比如引入的一個(gè)第三方庫中, 有需要被本App使用的方法或者屬性, 一般都會被聲明為open。
public:權(quán)限僅次于open朝聋,可以在任何地方被訪問嗡午。和 open 唯一的區(qū)別是: 不允許其他模塊進(jìn)行繼承、重寫冀痕。那么什么樣才能成為一個(gè)模塊呢荔睹?一個(gè)APP就是一個(gè)模塊,一個(gè)第三方框架等都是一個(gè)完整的模塊言蛇,這些模塊如果要對外留有訪問的屬性或者方法僻他,就應(yīng)該使用 public 的訪問權(quán)限。
internal:Swift 中默認(rèn)就是 internal 腊尚,可以省略不寫吨拗。只允許在當(dāng)前的模塊中訪問,繼承和重寫,不允許在其他模塊中訪問婿斥。
fileprivate: 可以在同一個(gè)物理文件中訪問(包含 extension),在子類中能訪問劝篷。
private: 只允許在定義的作用域內(nèi)訪問(包含 extension)訪問,在子類中不能訪問。
它們遵循的基本規(guī)則: 高級別的變量不允許被定義為低級別變量的成員變量,比如一個(gè) private 的 class 內(nèi)部允許包含 public的 String值,反之低級變量可以定義在高級別變量中.