Swift(六 訪問權(quán)限)

訪問修飾符有:open、public、internal、fileprivate、private
訪問修飾符可以修飾面向?qū)ο蟮念愋?,以及變量常量下標元組函數(shù)屬性等“實體”。

模塊:
一個應(yīng)用程序包(Application可以執(zhí)行,包含很多Swift文件以及其他文件)或者 一個框架(不可執(zhí)行文件,Swift文件以及其他文件的集合) import引用
源文件:
.swift文件,編譯之后被包含在應(yīng)用程序包或者框架中

1、open
任何open實體,無論在自己模塊,還是其他模塊都可以被訪問,open有個使用說明:only classes and overridable class members can be declared 'open'--即open只能適用于類class
2、public
約等于open,在同一模塊中open等于public,在不同模塊時,public所聲明的類不能被繼承,public所聲明的屬性和方法不能被重寫(override)
3、internal
默認訪問權(quán)限。只能在自己模塊中被訪問
4、fileprivate
只能在當(dāng)前文件中被訪問
5、private
只能在類型內(nèi)部被訪問

統(tǒng)一性原則
1、如果一個類型(包括類、結(jié)構(gòu)體、枚舉),定義為internal或者private,那么類型聲明的變量或者常量(實例化)不能使用public訪問級別。

   private class Employee{

          var no: Int = 0
          var name: String = ""
          var job: String?
          var salary: Double = 0
          var dept: Department?
}

   internal struct Department{

           var no: Int = 0
           var name: String = ""
}

 public let emp = Employee()  // fileprivate\private是可以的
 public var dept = Department()
 // 編譯報錯:Playground execution failed: error: MyPlayground.playground:12:12: error: constant cannot be declared public because its type 'Employee' uses a private type
 public let emp = Employee()
            ^

error: MyPlayground.playground:13:12: error: variable cannot be declared public because its type 'Department' uses an internal type
public var dept = Department()
           ^

2、函數(shù)的訪問權(quán)限級別不能高于它的參數(shù)和返回值類型(類、結(jié)構(gòu)體、枚舉)的訪問級別

   class Employee{

      var no: Int = 0
      var name: String = ""
      var job: String?
      var salary: Double = 0
     var dept: Department?
  }
struct Department{
    var no: Int = 0
    var name: String = ""
  }

public func getEmpDept(emp: Employee)->Department?{
          return emp.dept
}

//  編譯失敗:Playground execution failed: error: MyPlayground.playground:11:14: error: function cannot be declared public because its parameter uses an internal type
public func getEmpDept(emp: Employee)->Department?{
            ^               ~~~~~~~~
 會有函數(shù)可以被任何人訪問,而他的參數(shù)和返回類型不可以訪問的矛盾情況

設(shè)計原則
1、如果本應(yīng)用程序訪問,默認的訪問級別就可以。
2、如果是框架的開發(fā),讓別人使用的就public,不讓別人看到的就設(shè)定為internal private

元組類型的訪問級別遵循元組中字段最低級的訪問級別

枚舉類型的訪問級別
枚舉類型的訪問級別繼承自該枚舉,因此我們不能為枚舉中的成員指定訪問級別。

最后編輯于
?著作權(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)容