A partir de Swift 3.0.1 , hay 4 niveles de acceso , que se describen a continuación, desde el más alto (menos restrictivo) hasta el más bajo (más restrictivo).
1. openypublic
Permita que una entidad se use fuera del módulo de definición (objetivo). Por lo general, utiliza openo publicaccede al especificar la interfaz pública a un marco.
Sin embargo, el openacceso se aplica solo a las clases y a los miembros de la clase , y difiere del publicacceso de la siguiente manera:
public Las clases y los miembros de la clase solo pueden subclasificarse y anularse dentro del módulo de definición (destino).
open Las clases y los miembros de la clase pueden subclasificarse y anularse tanto dentro como fuera del módulo de definición (objetivo).
// 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
Permite que una entidad se use dentro del módulo de definición (objetivo). Por lo general, utiliza el internalacceso al definir la estructura interna de una aplicación o un marco.
// 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
Restringe el uso de una entidad a su archivo fuente de definición. Por lo general, usa el fileprivateacceso para ocultar los detalles de implementación de una pieza específica de funcionalidad cuando esos detalles se usan dentro de un archivo completo.
// 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
Restringe el uso de una entidad a su declaración adjunta. Por lo general, usa el privateacceso para ocultar los detalles de implementación de una pieza específica de funcionalidad cuando esos detalles se usan solo dentro de una sola declaración.
// First.framework – A.swift
internal struct A {
private static let x: Int
internal static func doSomethingWithX() {
x // ok
}
}
A.x // error: x is unavailable