swift中private,public,internal,fileprivate,open的修飾范圍

一.概述

在Swift3中除去原有的3個(gè)訪問(wèn)控制關(guān)鍵字private,public,internal,又重新添加了2個(gè)關(guān)鍵字fileprivate和open;
它們是對(duì)private和public的進(jìn)一步細(xì)分;

二.private和fileprivate的修飾范圍

原來(lái)的private對(duì)于同一個(gè)文件的各個(gè)方法來(lái)說(shuō)都可以訪問(wèn)到,這往往不是開(kāi)發(fā)者想要的結(jié)果;
于是原來(lái)的private變成了fileprivate,而private變?yōu)榱苏嬲乃接性L問(wèn)控制;
從swift3開(kāi)始 private的訪問(wèn)權(quán)限更小了,而fileprivate代替的原來(lái)private的訪問(wèn)權(quán)限;
這意味著即使在同一個(gè)文件中用private修飾的方法也不可以被代碼域之外所訪問(wèn)了;

比如下面這段代碼,如果把fileprivate改為private,代碼就會(huì)報(bào)錯(cuò);

//下面代碼雖在在同一個(gè)類(lèi)中,但是不在同一個(gè)作用域所以要想調(diào)用就不能用private修飾
class ViewController: UIViewController {
    fileprivate func test() -> (){
       print("wertyuiop")
    }
    
    func show_test2() -> (){
        test2()
    }
}

extension ViewController{
    func showTest(){
       test()
    }
    
    fileprivate func test2(){
        print("asdf")
    }
}

三.public和open

而對(duì)于open來(lái)說(shuō)是補(bǔ)充public語(yǔ)義上的缺陷.原來(lái)的public有2層含義:
1.被public修飾后,可以在其他作用域被訪問(wèn)
2.被public修飾后,可以在其他作用域被繼承或重載override

而后一種含義從某種意義上說(shuō)是一件危險(xiǎn)的行為,你往往不希望某個(gè)類(lèi)或?qū)傩员焕^承或修改,這就是傳統(tǒng)意義上的final;

但是被final標(biāo)記后在任何地方都不能被override,對(duì)于lib設(shè)計(jì)者來(lái)說(shuō)希望的結(jié)果是在module(模塊)內(nèi)可以被override,而在import到外部后不能被override;

這就是open產(chǎn)生的原因,現(xiàn)在的public表示在其他module中不可以被override和繼承,而open表示原來(lái)public的含義:表示在其他module被訪問(wèn)、被重載、被繼承;

四.總結(jié)

現(xiàn)在的訪問(wèn)權(quán)限由高到低依次為:open,public,interal,fileprivate,private

修飾符號(hào)|修飾范圍
----|-----|----
open|可以被其他module被訪問(wèn)、被重載、被繼承
public|類(lèi)似于final,可以被其他module被訪問(wèn),不可以被重載和繼承
interal|只能訪問(wèn)自己module(模塊)的任何internal實(shí)體,不能訪問(wèn)其他模塊中的internal實(shí)體。internal可以省略,換句話說(shuō),默認(rèn)訪問(wèn)限定是internal
fileprivate|可以在本類(lèi)中進(jìn)行訪問(wèn)
private|只可以在本類(lèi)而且在同一個(gè)作用域中被訪問(wèn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容