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. open
ypublic
Permita que una entidad se use fuera del módulo de definición (objetivo). Por lo general, utiliza open
o public
accede al especificar la interfaz pública a un marco.
Sin embargo, el open
acceso se aplica solo a las clases y a los miembros de la clase , y difiere del public
acceso 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 internal
acceso 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 fileprivate
acceso 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 private
acceso 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