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. openetpublic
Activer une entité à utiliser en dehors du module de définition (cible). Vous utilisez openou publicaccédez généralement lors de la spécification de l'interface publique d'un framework.
Cependant, l' openaccès s'applique uniquement aux classes et aux membres de la classe , et il diffère de l' publicaccè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' internalaccè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' fileprivateaccè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' privateaccè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