As of Swift 3.0.1, there are 4 levels of access,如下所述,从最高(限制最少)到最低(限制最多)。
1。 open 和 public
使实体能够在定义模块(目标)之外使用。在指定框架的公共接口时,您通常使用open 或public 访问权限。
但是,open 访问权限仅适用于类和类成员,它与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
使实体能够在定义模块(目标)中使用。在定义应用程序或框架的内部结构时,您通常使用internal 访问权限。
// 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 访问权限来隐藏在整个文件中使用特定功能的实现细节。
// 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 访问权限来隐藏特定功能的实现细节,而这些细节仅在单个声明中使用。
// First.framework – A.swift
internal struct A {
private static let x: Int
internal static func doSomethingWithX() {
x // ok
}
}
A.x // error: x is unavailable