概述
隱藏實(shí)現(xiàn)機(jī)制,僅暴露對(duì)應(yīng)的接口和 API 給外部調(diào)用者驶沼,是面向?qū)ο蟮淖罴褜?shí)踐之一炮沐。訪問控制機(jī)制(Access Control)是實(shí)現(xiàn)此機(jī)制的利器之一。類似于 c++回怜、Java大年、C#等,Swift 語言也加入了訪問控制機(jī)制玉雾,而且顆粒度更細(xì)翔试,以便對(duì)代碼進(jìn)行更精細(xì)化的控制。
訪問控制的施加對(duì)象
- 類型(individual types)
- 類 (class)
- 結(jié)構(gòu) (structure)
- 枚舉 (enumration)
- 類型之
- 屬性 (property)
- 方法 (method)
- 初始化器 (initializer)
- 下標(biāo) (subscript)
模塊和源文件
- 模塊(module) 指的是一個(gè)單獨(dú)的代碼發(fā)布單元复旬,例如 framework遏餐、app、package等赢底。其特征是可以在其他模塊中使用 import 關(guān)鍵字導(dǎo)入和使用失都。
- 源文件(source file) 指的是一個(gè)單獨(dú)的 Swift 源代碼文件,通常在模塊或者 app 中幸冻。
訪問控制表
Access Level (訪問級(jí)別) |
繼承和 override | 外部 (App等) |
module (模塊) |
source file (當(dāng)前代碼文件) |
類/結(jié)構(gòu) | 說明 |
---|---|---|---|---|---|---|
open | 最高等級(jí)粹庞。在外部模塊中,可以繼承洽损,也可以 override庞溜。 | |||||
public | 公開。在外部模塊中碑定,不可繼承和 override流码。 | |||||
internal |
缺省訪問控制級(jí)別。 模塊內(nèi)部均可訪問延刘。 |
|||||
fileprivate | 僅當(dāng)前源文件內(nèi)部訪問漫试。 | |||||
private | 僅當(dāng)前源代碼的當(dāng)前類、結(jié)構(gòu)內(nèi)部訪問碘赖。 |
訪問級(jí)別的基本原則
Swift 的訪問級(jí)別遵循一條基本原則:實(shí)體不能被定義在低訪問級(jí)別的實(shí)體中驾荣。
例如:
- public 變量不能定義在 internal 類型中
- 函數(shù)的訪問級(jí)別不能高于其參數(shù)和返回值的最低訪問級(jí)別
例外情況是在單元測試中,測試案例可以訪問任何內(nèi)部實(shí)體普泡。
訪問控制語法
open class SomeOpenClass {}
public class SomePublicClass {}
internal class SomeInternalClass {}
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}
open var someOpenVariable = 0
public var somePublicVariable = 0
internal let someInternalConstant = 0
fileprivate func someFilePrivateFunction() {}
private func somePrivateFunction() {}