限制訪問代碼塊,模塊和抽象通過訪問控制來完成。類,結(jié)構(gòu)和枚舉可以根據(jù)自己的屬性,方法,初始化函數(shù)和下標來通過訪問控制機制進行訪問。常量,變量和函數(shù)的協(xié)議限制,并允許通過訪問控制來訪問全局和局部變量。應(yīng)用于屬性,類型及函數(shù)的訪問控制可以被稱為“實體”。
訪問控制模型是基于模塊和源文件的。
模塊定義為代碼分配一個單獨的單元,并且可以使用import 關(guān)鍵字導(dǎo)入。源文件被定義為一個單一的源代碼文件,模塊可訪問多種類型和函數(shù)。
三種不同的訪問級別是由 Swift 語言提供。它們分別是 Public, Internal 和 Private 訪問。
| 方法級別 | 定義 |
| Public | 啟用實體可以以任何源文件從它們的定義模塊處理,導(dǎo)入已定義模塊到另一個模塊的源文件中。 |
| Internal | 從它們定義模塊啟用實體被包含在任何的源文件,但不是在模塊的外部的任何源文件。 |
| Private | 限制使用一個實體的自身限定源文件。private訪問扮演的角色是隱藏一個特定代碼功能的實現(xiàn)細節(jié)。 |
public class SomePublicClass {} internal class SomeInternalClass {} private class SomePrivateClass {} public var somePublicVariable = 0 internal let someInternalConstant = 0 private func somePrivateFunction() {}
某些函數(shù)可能有參數(shù)在函數(shù)聲明中但沒有任何返回值。下面的程序聲明 a 和 b 作為參數(shù)傳遞給sum()函數(shù)。內(nèi)部函數(shù)本身為參數(shù)a和b的值是通過調(diào)用所述通過調(diào)用函數(shù) sum(),其值被打印從而不用返回值。為了使函數(shù)的返回類型為私有,聲明函數(shù)使用 private 修飾整體訪問級別。
private func sum(a: Int, b: Int) { let a = a + b let b = a - b println(a, b) } sum(20, 10) sum(40,10) sum(24,6)
當(dāng)我們使用 playground 運行上面的程序,得到以下結(jié)果
(30, 20) (50, 40) (30, 24)
public enum Student{ case Name(String) case Mark(Int,Int,Int) } var studDetails = Student.Name("Swift") var studMarks = Student.Mark(98,97,95) switch studMarks { case .Name(let studName): println("Student name is: \(studName).") case .Mark(let Mark1, let Mark2, let Mark3): println("Student Marks are: \(Mark1),\(Mark2),\(Mark3).") default: println("Nothing") }
當(dāng)我們使用 playground 運行上面的程序,得到以下結(jié)果
Student Marks are: 98,97,95
枚舉在Swift語言中將自動接收枚舉個體并都具有相同的訪問級別。例如,考慮訪問固定于三個科目枚舉名稱,學(xué)生的名字和標記被聲明為 student 而存在于枚舉類中的成員都屬于字符串?dāng)?shù)據(jù)類型名稱,標記表示為 mark1, mark2 和 mark3 數(shù)據(jù)類型為整數(shù)。要訪問無論是學(xué)生名稱或標記分數(shù)。 現(xiàn)在,如果被執(zhí)行 Switch case 塊將打印學(xué)生姓名,否則它將打印由學(xué)生固定的標記。如果這兩個條件都失敗默認塊將被執(zhí)行。
Swift 允許用戶子類,可以在當(dāng)前訪問上下文存取的任何類。子類不能比其超類有更高的訪問級別。 用戶限制一個公共子類寫入一個內(nèi)部超類。
public class cricket { private func print() { println("Welcome to Swift Super Class") } } internal class tennis: cricket { override internal func print() { println("Welcome to Swift Sub Class") } } let cricinstance = cricket() cricinstance.print() let tennisinstance = tennis() tennisinstance.print()
當(dāng)我們使用 playground 運行上面的程序,得到以下結(jié)果
Welcome to Swift Super Class Welcome to Swift Sub Class
Swift 常量,變量或?qū)傩圆荒鼙欢x比其類型更公開。這是無效一個 public 屬性與 private 類型的寫法。同樣,下標不能超過其索引或返回類型更公開。
當(dāng)一個常量,變量,屬性或下標使用了一個私有類型,則常量,變量,屬性或下標,也必須標記為私有:
private var privateInstance = SomePrivateClass()
getter和setter常量,變量,屬性和標自動接收它們屬于相同的訪問級別的常量,變量,屬性或下標。
class Samplepgm { private var counter: Int = 0{ willSet(newTotal){ println("Total Counter is: \(newTotal)") } didSet{ if counter > oldValue { println("Newly Added Counter \(counter - oldValue)") } } } } let NewCounter = Samplepgm() NewCounter.counter = 100 NewCounter.counter = 800
當(dāng)我們使用 playground 運行上面的程序,得到以下結(jié)果
上一篇:Swift通過可選鏈調(diào)用方法下一篇:Swift語句