Swift中private、fileprivate、public、open和internal許可權程式碼證明詳解

學術袁發表於2019-04-23

在這裡插入圖片描述
Swift學習中程式碼也寫了很多,但是對於swift中的許可權的定義和使用上真是不明白。很尷尬,所以就抽一時間給寫一下並驗證對他們對定義!然後就寫了下面對結構:
在這裡插入圖片描述

Swift許可權詳解

先做一下總結:
在許可權定義上,從嚴格到寬鬆排序 private \ fileprivate \ internal \ public \ open
private : 使用範圍只限於當前定義了變數和方法的 class 類中,以及當前swift檔案額extension擴充套件屬性中(擴充套件屬性另起一個swift檔案,則不行)。且,使用它修飾過的類不能被繼承 ,當然方法也不能被呼叫和重寫。
fileprivate : 使用範圍只限於當前.swift檔案中的類(包含當前swift檔案中另定義的class類)和extentsion擴充套件屬性中(擴充套件屬性另起一個swift檔案,則不行)。且,使用它修飾過的類不能被繼承 ,當然方法也不能被呼叫和重寫。
internalpublicopen 他們三個在同一個module中的使用範圍是一樣的。相同點,在相同swift檔案和不同目錄檔案中均可被繼承和重寫與訪問。不同點internal在module內部使用,即可被訪問。public在moudle外,可被訪問,只能被繼承但內部屬性不能被重寫。open在module外,可被訪問,既能被繼承且內部屬性也能被重寫。

private 許可權 <類私有>

使用範圍只限於當前定義了變數和方法的 class 類中,以及當前swift檔案額extension擴充套件屬性中(擴充套件屬性另起一個swift檔案,則不行)。且,使用它修飾過的類不能被繼承 ,當然方法也不能被呼叫和重寫。
先看一個Iphone.swift檔案
在這裡插入圖片描述
從當前的swift檔案看出,private許可權的使用範圍——範圍只限於在當前的swift檔案中,且當前檔案新定義的class類中也無法訪問使用。
在看一個Iphone.swift擴充套件檔案
在這裡插入圖片描述
從這裡擴充套件檔案中看,使用private許可權描述的方法和變數,也不能直接進行訪問。
通過在CurFileTester.swift檔案發現
在這裡插入圖片描述
使用private許可權進行修飾的類,不能被繼承,方法不能被重寫。

fileprivate 許可權 <檔案私有>

使用範圍只限於當前.swift檔案中的類(包含當前swift檔案中另定義的class類)和extentsion擴充套件屬性中(擴充套件屬性另起一個swift檔案,則不行)。且,使用它修飾過的類不能被繼承 ,當然方法也不能被呼叫和重寫。
先看一個Iphone.swift檔案
在這裡插入圖片描述
當前的swift檔案看出,fileprivate許可權的使用範圍——範圍只限於在當前的swift檔案和當前檔案新定義的class類中。
在看一個Iphone.swift擴充套件檔案
在這裡插入圖片描述
從這裡擴充套件檔案中看,使用private許可權描述的方法和變數,也不能直接進行訪問。
通過在CurFileTester.swift檔案發現
在這裡插入圖片描述
使用fileprivate許可權進行修飾的類,不能被繼承,方法不能被重寫。

Other

**internal** 、 **public** 、**open** 他們三個在同一個module中的使用範圍是一樣的。在相同swift檔案和不同目錄檔案中均可被繼承和重寫與呼叫。
通過在CurFileTester.swift檔案發現
在這裡插入圖片描述
通過在IphoneXSTester.swift檔案發現
在這裡插入圖片描述
通過來自相同和不同目錄資料夾的上面內容便可證實internal許可權、public 許可權和open 許可權 修飾過的類可被繼承,方法可被重寫,變數等均可被訪問的結論。

還有一點暫時不能程式碼證實的結論是,open和public許可權的區別是,一個元素在其他module中是否只能被訪問或者被override。 因為open的許可權比public更寬泛!而在許可權定義上,從嚴格到寬鬆排序是 private \ fileprivate \ internal \ public \ open

相關文章