訪問修飾符:在swift
中,訪問修飾符有五種,分別是:open、public 、internal、fileprivate、private
。
從高到低的排序:open
> public
>interal
> fileprivate
> private
open
:可以被任何模塊的代碼訪問,包括override(重寫)和繼承。
public
: 可以被任何模塊的代碼訪問,模塊內(nèi)是可以被override(重寫)和繼承的,而在但其他模塊不可以override(重寫)和繼承。
internal
:內(nèi)部的意思。默認訪問級別,可寫可不寫,訪問級別所修飾的屬性或方法在源代碼所在的整個模塊都可以訪問。
fileprivate
:修飾的屬性或者方法只能在當前文件中訪問,包括override(重寫)和繼承,當前類的extension 中也可以。如果一個文件中含有多個類,這些類中也可以。
類級別
/文件級別
/模塊級別
/全域訪問
/全域繼承+重載
class Person
{
fileprivate var jobTitle:String = ""
}
extension Person
{
//當 extension 和 class 在同一個文件中時,允許訪問
func printJobTitle()
{
print("My job is \(jobTitle)")
}
}
private
:修飾的屬性或者方法只能在當前類中訪問,當前類的extension 中也可以訪問。如果當前文件有多個類,這些類中不可以訪問。
image
case
private
access.swift
private class AccessPrivate {
func demo() -> Void {
}
}
error Class must be declared private or fileprivate because its superclass is private
access.swift
class AccessPrivateImp: AccessPrivate {
override func demo() {
}
}
success
access.swift
fileprivate/private class AccessPrivateImp: AccessPrivate {
override func demo() {
}
}
1. class 關(guān)鍵詞修飾與 superclass 關(guān)鍵詞修飾的級別有相關(guān)性, 當前類權(quán)限級別<=superclass權(quán)限級別
2. private 當前類的 extension 也是可以訪問