Swift-訪問控制解析

訪問控制解析

簡介:

和其他高級語言一樣Swift中也增加了訪問控制,在Swift中提供了private刃永、internal舔清、public三種訪問級別含友,但是不同的是Swift中的訪問級別是基于模塊(module,或者target)和源文件(.swift文件)的钮热,而不是基于類型填抬、命名空間聲明。

1.相關概念

  • 模塊指的是獨立的代碼單元隧期,框架或應用程序會作為一個獨立的模塊來構建和發(fā)布飒责。在 Swift 中赘娄,一個模塊可以使用 import 關鍵字導入另外一個模塊。

  • 實體:對于代碼中可以設置訪問級別的特性(屬性宏蛉、基本類型遣臼、函數(shù)等),稱之為實體拾并。

  • 源文件就是 Swift 中的源代碼文件揍堰,它通常屬于一個模塊,即一個應用程序或者框架嗅义。盡管我們一般會將不同的類型分別定義在不同的源文件中屏歹,但是同一個源文件也可以包含多個類型、函數(shù)之類的定義之碗。

2.關鍵字介紹

  • public:可以訪問同一模塊源文件中的任何實體蝙眶,在模塊外也可以通過導入該模塊來訪問源文件里的所有實體。通常情況下褪那,框架中的某個接口可以被任何人使用時幽纷,你可以將其設置為 public 級別。
    (在模塊內部和外部都可以使用)

  • internal:可以訪問同一模塊源文件中的任何實體武通,但是不能從模塊外訪問該模塊源文件中的實體霹崎。通常情況下妆艘,某個接口只在應用程序或框架內部使用時褥赊,你可以將其設置為 internal 級別。
    (模塊內部使用, 應用程序或者框架內部)

  • private:限制實體只能在所在的源文件內部使用匙握。使用 private 級別可以隱藏某些功能的實現(xiàn)細節(jié)囚枪。
    (只能在當前源文件中使用)

  • 注意:Swift 中的 private 訪問級別不同于其他語言派诬,它的范圍限于源文件,而不是聲明范圍內

3.使用注意:

  • 1> public 為最高(限制最少)訪問級別链沼,private 為最低(限制最多)訪問級別默赂。
  • 2> Swift 中的訪問級別遵循一個基本原則:不可以在某個實體中定義訪問級別更高的實體
  • 一個類型的訪問級別也會影響到類型成員(屬性括勺、方法缆八、構造器、下標)的默認訪問級別疾捍。

  • 如果你將類型指定為 private 級別奈辰,那么該類型的所有成員的默認訪問級別也會變成 private。

  • 如果你將類型指定為 public 或者 internal 級別(或者不明確指定訪問級別乱豆,而使用默認的 internal 訪問級別)奖恰,那么該類型的所有成員的默認訪問級別將是 internal。

  • 上面提到,一個 public 類型的所有成員的訪問級別默認為 internal 級別瑟啃,而不是 public 級別论泛。

  • 如果你想將某個成員指定為 public 級別,那么你必須顯式指定蛹屿。

  • 這樣做的好處是屁奏,在你定義公共接口的時候,可以明確地選擇哪些接口是需要公開的蜡峰,哪些是內部使用的了袁,避免不小心將內部使用的接口公開。

練習:
public class SomePublicClass {          // 顯式的 public 類
    public var somePublicProperty = 0  // 顯式的 public 類成員
    var someInternalProperty = 0        // 隱式的 internal 類成員
    private func somePrivateMethod() {} // 顯式的 private 類成員
}

class SomeInternalClass {              // 隱式的 internal 類
    var someInternalProperty = 0        // 隱式的 internal 類成員
    private func somePrivateMethod() {} // 顯式的 private 類成員
}

private class SomePrivateClass {        // 顯式的 private 類
    var somePrivateProperty = 0        // 隱式的 private 類成員
    func somePrivateMethod() {}        // 隱式的 private 類成員
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末湿颅,一起剝皮案震驚了整個濱河市载绿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌油航,老刑警劉巖崭庸,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谊囚,居然都是意外死亡怕享,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門镰踏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來函筋,“玉大人,你說我怎么就攤上這事奠伪〉剩” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵绊率,是天一觀的道長谨敛。 經常有香客問我,道長滤否,這世上最難降的妖魔是什么脸狸? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮藐俺,結果婚禮上炊甲,老公的妹妹穿的比我還像新娘。我一直安慰自己欲芹,他們只是感情好蜜葱,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耀石,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滞伟,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天揭鳞,我揣著相機與錄音,去河邊找鬼梆奈。 笑死野崇,一個胖子當著我的面吹牛,可吹牛的內容都是我干的亩钟。 我是一名探鬼主播乓梨,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼清酥!你這毒婦竟也來了扶镀?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤焰轻,失蹤者是張志新(化名)和其女友劉穎臭觉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辱志,經...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蝠筑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了揩懒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片什乙。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖已球,靈堂內的尸體忽然破棺而出臣镣,到底是詐尸還是另有隱情,我是刑警寧澤和悦,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布退疫,位于F島的核電站,受9級特大地震影響鸽素,放射性物質發(fā)生泄漏褒繁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一馍忽、第九天 我趴在偏房一處隱蔽的房頂上張望棒坏。 院中可真熱鬧,春花似錦遭笋、人聲如沸坝冕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喂窟。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間磨澡,已是汗流浹背碗啄。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留稳摄,地道東北人稚字。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像厦酬,于是被迫代替她去往敵國和親胆描。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容