訪問控制

參考官方文檔

前置知識:模塊和源文件

創(chuàng)建一個iOS項目來對比學(xué)習(xí)

模塊
獨立的單元構(gòu)建和發(fā)布單位,實現(xiàn)某個特定功能的代碼集合
創(chuàng)建的一個項目就是一個模塊
import 導(dǎo)入別人的模塊(本質(zhì)是別人寫好的項目,直接拿過來用),演示查看UIKIT源代碼,導(dǎo)入了很多模塊
注意:模塊不是目錄,更不是文件夾,而是某個功能的集合,比如UIKit、第三方框架(snapkit)等

源文件
是一個模塊中的單個 Swift 源代碼文件。

訪問權(quán)限

訪問權(quán)限可以修飾 類、方法、屬性等。

  • open 和 public :允許實體被自己定義的模塊中的任意源文件訪問,也可以被另一模塊的源文件通過導(dǎo)入該定義模塊來訪問。在指定框架的公共接口時,通常使用 open 或 public。
    【演示】查看UIKIT源代碼,里面的方法幾乎都是public

  • internal:——不能出模塊(項目)
    允許實體被定義模塊中的任意源文件訪問,但不能被該模塊之外的任何源文件訪問。通常在定義應(yīng)用程序或是框架的內(nèi)部結(jié)構(gòu)時使用。(默認(rèn)級別)
    【演示】隨便創(chuàng)建一個類SecVC,可以在ViewController中訪問到。

  • fileprivate——不能出當(dāng)前源文件
    將實體的使用限制于當(dāng)前定義源文件中。
    【演示】

   1、新定義一個Woker類,其中fileprivate修飾的name,在另一個文件VC中無法訪問
    class Worker{  
          fileprivate var name:String
          override init() {
              self.salary = 6000
              self.name = "miao"
          }
      }
2、在woker類的源文件中新定義一個Company類,可以訪問name屬性
        class Company{
            var mishu:Worker
            init(mishu:Worker) {
                self.mishu = mishu
            }
            func printInfo(){
                print(mishu.name)  //可訪問name
            }
        }
  • private : ——不能出當(dāng)前作用域
    將實體的使用限制于封閉聲明中,比fileprivate更嚴(yán)格。
    【演示】
在woker類的新增屬性salary,同文件Company類中也訪問不了
   class Worker: {
       
       fileprivate var name:String
       private var salary:Int
       init() {
           self.salary = 6000
           self.name = "miao"
       }
   }

   class Company{
       var mishu:Worker
       init(mishu:Worker) {
           self.mishu = mishu
       }
       func printInfo(){
           print(mishu.name)  //可訪問name
           //print(mishu.salary)  //不可訪問salary
       }
   }

訪問原則

Swift 中的訪問級別遵循一個基本原則:實體不能定義在具有更低訪問級別(更嚴(yán)格)的實體中。

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

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

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