swift與c++不同堂淡,沒有頭文件扒腕,所有的實現(xiàn)都在源文件里萤悴。建立一個工程,就是建立了一個新模塊蹋盆。一個模塊可以使用import導(dǎo)入另外一個模塊硝全。
swift的訪問控制和模塊、源文件的概念有關(guān)伟众,swift定義了5個訪問級別:
開放訪問和公開訪問可以訪問同一模塊源文件中的任何實體凳厢,在模塊外也可以通過導(dǎo)入該模塊來訪問源文件里的所有實體。通常情況下先紫,框架中的某個接口可以被任何人使用時,你可以將其設(shè)置為開放或者公開訪問遮精。
內(nèi)部訪問可以訪問同一模塊源文件中的任何實體,但是不能從模塊外訪問該模塊源文件中的實體准脂。通常情況下眼俊,某個接口只在應(yīng)用程序或框架內(nèi)部使用時,你可以將其設(shè)置為內(nèi)部訪問疮胖。
文件私有訪問限制實體只能被所定義的文件內(nèi)部訪問。當(dāng)需要把這些細節(jié)被整個文件使用的時候院塞,使用文件私有訪問隱藏了一些特定功能的實現(xiàn)細節(jié)性昭。
私有訪問限制實體只能在所定義的作用域內(nèi)使用。需要把這些細節(jié)被整個作用域使用的時候汹族,使用文件私有訪問隱藏了一些特定功能的實現(xiàn)細節(jié)。
用修飾符open夸政,public榴徐,internal,fileprivate坑资,private來聲明實體的訪問級別。
默認的訪問級別是內(nèi)部訪問袱贮。
public class SomePublicClass {? ? ? ? ? ? ? ? ? // 顯式公開類
? ? public var somePublicProperty = 0? ? ? ? ? ? // 顯式公開類成員
? ? var someInternalProperty = 0? ? ? ? ? ? ? ? // 隱式內(nèi)部類成員
? ? fileprivate func someFilePrivateMethod() {}? // 顯式文件私有類成員
? ? private func somePrivateMethod() {}? ? ? ? ? // 顯式私有類成員
}
class SomeInternalClass {? ? ? ? ? ? ? ? ? ? ? // 隱式內(nèi)部類
? ? var someInternalProperty = 0? ? ? ? ? ? ? ? // 隱式內(nèi)部類成員
? ? fileprivate func someFilePrivateMethod() {}? // 顯式文件私有類成員
? ? private func somePrivateMethod() {}? ? ? ? ? // 顯式私有類成員
}
fileprivate class SomeFilePrivateClass {? ? ? ? // 顯式文件私有類
? ? func someFilePrivateMethod() {}? ? ? ? ? ? ? // 隱式文件私有類成員
? ? private func somePrivateMethod() {}? ? ? ? ? // 顯式私有類成員
}
private class SomePrivateClass {? ? ? ? ? ? ? ? // 顯式私有類
? ? func somePrivateMethod() {}? ? ? ? ? ? ? ? ? // 隱式私有類成員
}
元組類型訪問級別
元組的訪問級別由最嚴格的元素訪問級別決定仿便。
函數(shù)訪問級別
函數(shù)訪問級別由最嚴格的參數(shù)或者返回類型的訪問級別決定。但是字柠,如果這種訪問級別不符合函數(shù)定義所在環(huán)境的默認訪問級別探越,那么就需要明確地指定該函數(shù)的訪問級別狡赐。
枚舉類型訪問級別
枚舉成員的訪問級別與枚舉類型相同窑业,不能單獨為枚舉成員設(shè)置訪問級別。
子類
子類的訪問級別不能高于父類的訪問級別枕屉。