Swift-進階 11:訪問控制權(quán)限

Swift 進階之路 文章匯總

主要介紹swift中的訪問控制權(quán)限關(guān)鍵字

private

1糊啡、private:訪問級別僅在當(dāng)前定義的作用域內(nèi)有效(單例中使用過)

//8-1切诀、private:訪問級別`僅在當(dāng)前定義的作用域內(nèi)有效
class CJLTeacher{
    static let shareInstance = CJLTeacher()
    private init(){}
}
var t = CJLTeacher.shareInstance

filePrivate

filePrivate:訪問限制僅限制在當(dāng)前定義的源文件中

<!--1件缸、在access.swift文件中定義CJLPartTimeTeacher-->
fileprivate class CJLPartTimeTeacher: CJLTeacher{
    var partTime: Double?
    init(_ partTime: Double) {
        super.init()
        self.partTime = partTime
    }
}

<!--2、在main.swift中無法訪問CJLPartTimeTeacher-->
調(diào)用報錯提示

在access.swift文件中定義一個CJLPartTimeTeacher全局變量茧痕,系統(tǒng)報錯句葵,其主要原因是 pt 默認(rèn)的權(quán)限是 Internal的,而CJLPartTimeTeacher的訪問權(quán)限是fileprivate的廊遍,pt的權(quán)限大于CJLPartTimeTeacher嬉愧,系統(tǒng)不允許這樣,所以提示錯誤

filePrivate報錯提示

  • 需要使用private / fileprivate修飾pt
private let pt = CJLPartTimeTeacher(10.0)
//或者
fileprivate let pt = CJLPartTimeTeacher(10.0)

如果是直接定義在方法中的喉前,可以不用訪問權(quán)限修飾符

func test(){
    let pt = CJLPartTimeTeacher(10.0)
}

Internal

Internal:默認(rèn)訪問級別没酣,允許定義模塊中的任意源文件訪問王财,但不能被該模塊之外的任何源文件訪問(例如 import Foundation,其中Foundation就是一個模塊)

<!--1裕便、main.swift-->
import Foundation
class CJLTeacher{
    init(){}
}
let t = CJLTeacher()

<!--2绒净、custom-->
import AppKit
//訪問main.swift中t,報錯:Expressions are not allowed at the top level
print(t)

Internal報錯提示

報錯的主要原因是tmain.swift文件中的默認(rèn)權(quán)限是Internal偿衰,只能在同一個模塊內(nèi)使用挂疆,其屬于Foundation模塊,而custom.swift文件中不能調(diào)用t下翎,是因為其屬于AppKit模塊缤言,與Foundation并不是同一個模塊,所以不能訪問

public

public:開放式訪問视事,使我們能夠在其定義模塊的任何源文件中使用代碼胆萧,并且可以從另一個源文件訪問源文件。但是只能在定義的模塊中繼承和子類重寫

open

open:最不受限制的訪問級別俐东,可以在任意地方跌穗、任意模塊間被繼承、定義虏辫、重寫

public與open的區(qū)別

  • public不可繼承

  • open可繼承

總結(jié):

  • 沒有寫訪問控制權(quán)限關(guān)鍵字時蚌吸,默認(rèn)訪問權(quán)限是internal

  • 訪問控制權(quán)限從高到低的順序:open > public > internal > filePrivate > private

    • 1、private:訪問級別僅在當(dāng)前定義的作用域內(nèi)有效

    • 2砌庄、filePrivate:訪問限制僅限制在當(dāng)前定義的源文件中

    • 3套利、Internal:默認(rèn)訪問級別,允許定義模塊中的任意源文件訪問鹤耍,但不能被該模塊之外的任何源文件訪問

    • 4肉迫、public:開放式訪問,使我們能夠在其定義模塊的任何源文件中使用代碼稿黄,并且可以從另一個源文件訪問源文件喊衫。但是只能在定義的模塊中繼承和子類重寫

    • 5、open:最不受限制的訪問級別杆怕,可以在任意地方族购、任意模塊間被繼承、定義陵珍、重寫

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寝杖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子互纯,更是在濱河造成了極大的恐慌瑟幕,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異只盹,居然都是意外死亡辣往,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門殖卑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來站削,“玉大人,你說我怎么就攤上這事孵稽⌒砥穑” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵菩鲜,是天一觀的道長街氢。 經(jīng)常有香客問我,道長睦袖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任荣刑,我火速辦了婚禮馅笙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘厉亏。我一直安慰自己董习,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布爱只。 她就那樣靜靜地躺著皿淋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恬试。 梳的紋絲不亂的頭發(fā)上窝趣,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音训柴,去河邊找鬼哑舒。 笑死,一個胖子當(dāng)著我的面吹牛幻馁,可吹牛的內(nèi)容都是我干的洗鸵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼仗嗦,長吁一口氣:“原來是場噩夢啊……” “哼膘滨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起稀拐,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤火邓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贡翘,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蹈矮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸣驱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泛鸟。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖踊东,靈堂內(nèi)的尸體忽然破棺而出北滥,到底是詐尸還是另有隱情,我是刑警寧澤闸翅,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布再芋,位于F島的核電站,受9級特大地震影響坚冀,放射性物質(zhì)發(fā)生泄漏济赎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一记某、第九天 我趴在偏房一處隱蔽的房頂上張望司训。 院中可真熱鬧,春花似錦液南、人聲如沸壳猜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽统扳。三九已至,卻和暖如春畅姊,著一層夾襖步出監(jiān)牢的瞬間咒钟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工若未, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盯腌,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓陨瘩,卻偏偏與公主長得像腕够,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子舌劳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 訪問控制限制從其他源文件和模塊中的代碼訪問你的某些代碼帚湘。該特性使你能夠隱藏代碼的實現(xiàn)細節(jié),并指定一個首選接口甚淡,通過...
    WSJay閱讀 1,327評論 0 0
  • Optional Optional是通過enum實現(xiàn)的一個非常好的代表大诸,這里我們可以通過閱讀Optional的源碼...
    浪的出名閱讀 358評論 0 0
  • 概述 Swift 3中,新增了 fileprivate 和 open 權(quán)限,而在Swift4 中资柔,對 filepr...
    不簡單的風(fēng)度閱讀 766評論 0 2
  • 訪問控制可以限定其它源文件或模塊中的代碼對你的代碼的訪問級別焙贷。 這個特性可以讓我們隱藏代碼的一些實現(xiàn)細節(jié),并且可以...
    DevXue閱讀 158評論 0 0
  • private: 訪問級別僅在當(dāng)前定義的作?域內(nèi)有效 上?我們在類 Teacher 中定義了?個 private ...
    Mjs閱讀 194評論 0 0