今天突然發(fā)現(xiàn)訪問(wèn)控制open/public/internal/fileprivate/private藏斩,弄的不是很明看娇哆,于是查了以下資料馋艺,看了一篇關(guān)于這方面的博客嚎卫,在這里整理一下
<pre>
swift3.0中訪問(wèn)控制一共有5個(gè)關(guān)鍵字
*1. open:可以在任何地方訪問(wèn)嘉栓、繼承和重寫(xiě)
*2. public:可以在任何地方被訪問(wèn),在其他module中不能被繼承和重寫(xiě)(一會(huì)在詳細(xì)介紹一下什么是module內(nèi)和module外)
*3. internal:默認(rèn)訪問(wèn)級(jí)別拓诸,在整個(gè)模塊內(nèi)都可以被訪問(wèn)
*4. fileprivate:其修飾的屬性可以再同一個(gè)文件被訪問(wèn)侵佃、繼承和重寫(xiě),同一個(gè)文件指同一個(gè)swift文件奠支,一個(gè)文件中可以有多個(gè)類(lèi)
- private:其修飾的屬性和方法只能在本類(lèi)被訪問(wèn)和使用馋辈,不包括擴(kuò)展類(lèi)
</pre>
其訪問(wèn)權(quán)限從上至下,逐次降低,下面一一介紹這5個(gè)訪問(wèn)控制關(guān)鍵字
1.private 和 fileprivate
這兩個(gè)訪問(wèn)關(guān)鍵字都是防止文件外訪問(wèn)倍谜,但是還是有一些差別的
關(guān)于這兩個(gè)屬性的差別迈螟,比較簡(jiǎn)單,這里不贅述尔崔,fileprivate相當(dāng)于swift2.0中的private
2.internal
默認(rèn)訪問(wèn)級(jí)別,internal可以可不寫(xiě)
關(guān)于internal關(guān)鍵字答毫,解釋起來(lái)有點(diǎn)繞
internal訪問(wèn)級(jí)別所修飾的屬性或方法在源代碼所在的整個(gè)模塊都可以訪問(wèn)。
如果是框架或者庫(kù)代碼季春,則在整個(gè)框架內(nèi)部都可以訪問(wèn)洗搂,框架由外部代碼所引用時(shí),則不可以訪問(wèn)鹤盒。
如果是App代碼蚕脏,也是在整個(gè)App代碼,也是在整個(gè)App內(nèi)部可以訪問(wèn)侦锯。
3.public
1.使用public修飾的類(lèi),屬性或方法,可以被任何類(lèi)訪問(wèn),
2.但在其他的module中不可以被override和繼承,而在本module可以;
注意:module內(nèi)和module外的區(qū)別 : module內(nèi)是指不需要使用import引用文件驼鞭,就可以創(chuàng)建對(duì)象,表示module內(nèi)尺碰,而module外是指需要使用import文件才能創(chuàng)建對(duì)象才能使用
4.open
1.可以被任何人使用
2.也可以被override和繼承,這是和public的區(qū)別