《從零開始學Swift》學習筆記(Day 29)——訪問級別

智捷關東昇發表於2016-03-17

原創文章,歡迎轉載。轉載請註明:關東昇的部落格

訪問級別:
  Swift提供了3種不同訪問級別,對應的訪問修飾符為:public、internal和private。這些訪問修飾符可以修飾類、結構體、列舉等物件導向的型別,還可以修飾變數、常量、下標、元組、函式、屬性等內容。

  • public。可以訪問自己模組中的任何public實體。如果使用import語句引入其他模組,我們可以訪問其他模組中的public實體。
  • internal。只能訪問自己模組的任何internal實體,不能訪問其他模組中的internal實體。internal可以省略,換句話說,預設訪問限定是internal。
  • private。只能在當前原始檔中使用的實體,稱為私有實體。使用private修飾,可以用作隱藏某些功能的實現細節。
    使用訪問修飾符的示例程式碼如下:

    public class PublicClass {}
    internal class InternalClass {}
    private class PrivateClass {}
    
    
    public var intPublicVariable = 0
    let intInternalConstant = 0    
    private func intPrivateFunction() {}
    

使用最佳訪問級別:
  由於中Swift中訪問限定符能夠修飾的實體很多,使用起來比較繁瑣,下面我們給出一些最佳實踐。

  1、統一性原則

  • 原則1:如果一個型別(類、結構體、列舉)定義為internal或private,那麼型別宣告的變數或常量不能使用public訪問級別。因為public的變數或常量可以被任何人訪問,而internal或private的型別不可以。
  • 原則2:函式的訪問級別不能高於它的引數和返回型別(類、結構體、列舉)的訪問級別。假設函式宣告為public級別,而引數或者返回型別宣告為internal或private,就會出現函式可以被任何人訪問,而它的引數和返回型別不可以訪問的矛盾情況。

      2、設計原則
      如果我們編寫的是應用程式,應用程式包中的所有Swift檔案和其中定義的實體,都是供本應用使用的,而不是提供其他模組使用,那麼我們就不用設定訪問級別了,即使用預設的訪問級別。
    如果我們開發的是框架,框架編譯的檔案不能獨立執行,因此它天生就是給別人使用的,這種情況下我們要詳細設計其中的Swift檔案和實體的訪問級別,讓別人使用的可以設定為public,不想讓別人看到的可以設定為internal或private。

      3、 元組型別的訪問級別
    元組型別的訪問級別遵循元組中欄位最低階的訪問級別,例如下面的程式碼:

    private 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 = "" }

    private let emp = Employee() var dept = Department()

    private var student1 = (dept, emp) ①

      4、列舉型別的訪問級別
    列舉中成員的訪問級別繼承自該列舉,因此我們不能為列舉中的成員指定訪問級別。示例程式碼如下:

    public enum WeekDays { case Monday case Tuesday case Wednesday case Thursday case Friday }

由於WeekDays列舉型別是public訪問級別,因而它的成員也是public級別。

歡迎關注關東昇新浪微博@tony_關東昇。 關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程資訊

enter image description here

更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com 智捷課堂論壇網站:http://51work6.com/forum.php

相關文章