As of Swift 3.0.1, there are 4 levels of access,从最高(最低限制)到最低(最高限制),如下所述.
1. open
and public
允许在定义模块(目标)之外使用实体.在指定框架的公共接口时,通常使用open
或public
访问权限.
但是,它是100 access applies only to classes and class members,与public
访问不同,如下所示:
public
个类和类成员只能在定义模块(目标)中被子类化和重写.
open
个类和类成员可以在定义模块(目标)内外被子类化和重写.
// First.framework – A.swift
open class A {}
// First.framework – B.swift
public class B: A {} // ok
// Second.framework – C.swift
import First
internal class C: A {} // ok
// Second.framework – D.swift
import First
internal class D: B {} // error: B cannot be subclassed
2. internal
允许在定义模块(目标)中使用实体.在定义应用程序或框架的内部 struct 时,通常使用internal
access.
// First.framework – A.swift
internal struct A {}
// First.framework – B.swift
A() // ok
// Second.framework – C.swift
import First
A() // error: A is unavailable
3. fileprivate
将实体的使用限制为其定义源文件.当在整个文件中使用特定功能的实现细节时,通常使用fileprivate
access来隐藏这些细节.
// First.framework – A.swift
internal struct A {
fileprivate static let x: Int
}
A.x // ok
// First.framework – B.swift
A.x // error: x is not available
4. private
将实体的使用限制为其封闭声明.当特定功能的实现细节仅在单个声明中使用时,通常使用private
access来隐藏这些细节.
// First.framework – A.swift
internal struct A {
private static let x: Int
internal static func doSomethingWithX() {
x // ok
}
}
A.x // error: x is unavailable