No Swift 3.0.1 , existem 4 níveis de acesso , descritos abaixo, do mais alto (menos restritivo) ao mais baixo (mais restritivo).
1. open
epublic
Habilite uma entidade a ser usada fora do módulo de definição (destino). Você normalmente usa open
ou public
acessa ao especificar a interface pública para uma estrutura.
No entanto, o open
acesso se aplica apenas a classes e membros da classe e difere do public
acesso da seguinte maneira:
public
classes e membros da classe só podem ser subclassificados e substituídos no módulo de definição (destino).
open
classes e membros da classe podem ser subclassificados e substituídos dentro e fora do módulo de definição (destino).
// 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 uma entidade seja usada dentro do módulo de definição (destino). Você normalmente usa o internal
acesso ao definir a estrutura interna de um aplicativo ou de uma estrutura.
// 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 o uso de uma entidade ao seu arquivo de origem definidor. Você normalmente usa o fileprivate
acesso para ocultar os detalhes de implementação de uma parte específica da funcionalidade quando esses detalhes são usados em um arquivo inteiro.
// 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 o uso de uma entidade à sua declaração anexa. Você normalmente usa o private
acesso para ocultar os detalhes de implementação de uma parte específica da funcionalidade quando esses detalhes são usados apenas em uma única declaração.
// First.framework – A.swift
internal struct A {
private static let x: Int
internal static func doSomethingWithX() {
x // ok
}
}
A.x // error: x is unavailable