5种修饰符访问权限排序
open > public > internal > fileprivate > private
- open: 可以被任何人使用,表示当前类、属性或者方法可以在任何地方被继承或者override;
- public表示当前类、属性或者方法只能在当前module内被继承或者override,在当前module意外只能被访问;
- internal表示默认级别。理解(不知道是否正确):a 属于A, B import A, C import B, c不能直接使用a
- fileprivate: 文件内私有属性和方法,仅在当前文件中可以访问,包括同一个文件中不同的类;
- private: 私有属性和方法,仅在当前类中可以访问,不包括分类;
/// 以下所有的类都在同一个文件中
class Test: NSObject {
// 只能在当前大括号内访问
private var value: Int =
0
// 只能在当前文件内访问
fileprivate var value1: Int =
0
// 只能在当前大括号内访问
private func privatePractise() {
value =
1
value1 =
1
fileprivatePractise()
fileprivatePractise1()
print(
"privatePractise方法被调用了")
}
// 只能在当前文件内访问
fileprivate func fileprivatePractise() {
privatePractise()
fileprivatePractise()
fileprivatePractise1()
print(
"fileprivatePractise方法被调用了")
}
}
extension Test {
// 只能在当前大括号内访问
private func privatePractise1() {
value1 =
1
fileprivatePractise()
fileprivatePractise1()
print(
"privatePractise方法被调用了")
}
// 只能在当前文件内访问
fileprivate func fileprivatePractise1() {
privatePractise1()
fileprivatePractise()
print(
"fileprivatePractise方法被调用了")
}
}
class Test2: NSObject {
func test() {
let t = Test()
t.value1 =
0
t.fileprivatePractise()
t.fileprivatePractise1()
}
}
- final是一个辅助修饰词,表示当前类、属性或者方法在任何地方都只能被访问,不能被继承或者override;