Swift中private、fileprivate、public、open和internal許可權程式碼證明詳解
Swift學習中程式碼也寫了很多,但是對於swift中的許可權的定義和使用上真是不明白。很尷尬,所以就抽一時間給寫一下並驗證對他們對定義!然後就寫了下面對結構:
Swift許可權詳解
先做一下總結:
在許可權定義上,從嚴格到寬鬆排序 private \ fileprivate \ internal \ public \ open
。
private : 使用範圍只限於當前定義了變數和方法的 class 類中,以及當前swift檔案額extension擴充套件屬性中(擴充套件屬性另起一個swift檔案,則不行)。且,使用它修飾過的類不能被繼承 ,當然方法也不能被呼叫和重寫。
fileprivate : 使用範圍只限於當前.swift檔案中的類(包含當前swift檔案中另定義的class類)和extentsion擴充套件屬性中(擴充套件屬性另起一個swift檔案,則不行)。且,使用它修飾過的類不能被繼承 ,當然方法也不能被呼叫和重寫。
internal 、 public 、open 他們三個在同一個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
相關文章
- Swift 3.0 的 open,public,internal,fiSwift
- public, private, protected 訪問許可權訪問許可權
- GitHub的Repository許可權將public轉為privateGithub
- C++中類繼承public,protected和private關鍵字作用詳解及派生類的訪問許可權C++繼承訪問許可權
- MySQL 許可權詳解MySql
- java中public,protected,private關鍵字以及預設訪問許可權修飾符的用法細節Java訪問許可權
- django開發之許可權管理(一)——許可權管理詳解(許可權管理原理以及方案)、不使用許可權框架的原始授權方式詳解Django框架
- 許可權框架之Shiro詳解框架
- 【詳解】GrantedAuthority(已授予的許可權)
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- 小知識:軟體開發的許可權控制和許可權驗證
- 詳解GuassDB資料庫許可權命令:GRANT和REVOKE資料庫
- 【Git】程式碼許可權&分支管理Git
- Hadoop 許可權認證Hadoop
- Django REST framework中認證和許可權的使用方法DjangoRESTFramework
- Linux常用檔案許可權命令詳解Linux
- 5行程式碼搞定基於Auth的許可權認證行程
- 用無程式碼解決CRM角色許可權問題
- spring security許可權認證Spring
- 一對一原始碼,前端頁面許可權和按鈕許可權控制原始碼前端
- 詳解管理root使用者許可權的sudo服務程式
- 選單許可權和按鈕許可權設定
- Linux的檔案存取許可權和0644許可權Linux
- linux中安全和許可權那些事Linux
- 如何優雅的使用切面和註解實現許可權驗證
- spring boot 利用註解實現許可權驗證Spring Boot
- Fake許可權驗證小例子
- Android6.0------許可權申請管理(單個許可權和多個許可權申請)Android
- XtraBackup工具詳解 Part 4 XtraBackup許可權及配置
- Django(63)drf許可權原始碼分析與自定義許可權Django原始碼
- Python 訪問限制 private publicPython
- [Abp vNext 原始碼分析] - 7. 許可權與驗證原始碼
- 許可權之選單許可權
- 關於公司程式碼許可權的問題
- springboot + shiro 實現登入認證和許可權控制Spring Boot
- Springboot 整合ApachShiro完成登入驗證和許可權管理Spring Boot
- DRF比Django的認證和許可權高在哪裡Django
- 資料許可權技術驗證