Depuis Swift 3.0.1 , il existe 4 niveaux d'accès , décrits ci-dessous, du plus élevé (le moins restrictif) au plus bas (le plus restrictif).
1. open
etpublic
Activer une entité à utiliser en dehors du module de définition (cible). Vous utilisez open
ou public
accédez généralement lors de la spécification de l'interface publique d'un framework.
Cependant, l' open
accès s'applique uniquement aux classes et aux membres de la classe , et il diffère de l' public
accès comme suit:
public
les classes et les membres de classe peuvent uniquement être sous-classés et remplacés dans le module de définition (cible).
open
Les classes et les membres de classe peuvent être sous-classés et remplacés à l'intérieur et à l'extérieur du module de définition (cible).
// 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
Permet à une entité d'être utilisée dans le module de définition (cible). Vous utilisez généralement l' internal
accès lors de la définition de la structure interne d'une application ou d'un framework.
// 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
Limite l'utilisation d'une entité à son fichier source de définition. Vous utilisez généralement l' fileprivate
accès pour masquer les détails d'implémentation d'une fonctionnalité spécifique lorsque ces détails sont utilisés dans un fichier entier.
// 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
Restreint l'utilisation d'une entité à sa déclaration englobante. Vous utilisez généralement l' private
accès pour masquer les détails d'implémentation d'une fonctionnalité spécifique lorsque ces détails ne sont utilisés que dans une seule déclaration.
// First.framework – A.swift
internal struct A {
private static let x: Int
internal static func doSomethingWithX() {
x // ok
}
}
A.x // error: x is unavailable