访问修饰符:在swift
中,访问修饰符有五种,分别是:open、public 、internal、fileprivate、private
。
从高到低的排序:open
> public
>interal
> fileprivate
> private
open
:可以被任何模块的代码访问,包括override(重写)和继承。
public
: 可以被任何模块的代码访问,模块内是可以被override(重写)和继承的,而在但其他模块不可以override(重写)和继承。
internal
:内部的意思。默认访问级别,可写可不写,访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问。
fileprivate
:修饰的属性或者方法只能在当前文件中访问,包括override(重写)和继承,当前类的extension 中也可以。如果一个文件中含有多个类,这些类中也可以。
类级别
/文件级别
/模块级别
/全域访问
/全域继承+重载
class Person
{
fileprivate var jobTitle:String = ""
}
extension Person
{
//当 extension 和 class 在同一个文件中时,允许访问
func printJobTitle()
{
print("My job is \(jobTitle)")
}
}
private
:修饰的属性或者方法只能在当前类中访问,当前类的extension 中也可以访问。如果当前文件有多个类,这些类中不可以访问。
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 关键词修饰与 superclass 关键词修饰的级别有相关性, 当前类权限级别<=superclass权限级别
2. private 当前类的 extension 也是可以访问