J'ai lu la référence d'Apple sur les modificateurs d'accès dans Swift 3. Je lisais également la même chose sur stackoverflow mais je n'ai pas eu de réponse en tant que personne qui l'a demandé. Si j'ai bien compris, il y a quatre niveaux:
J'ai créé les schémas pour moi-même afin de comprendre la différence entre tous ces modificateurs et uploadé ici . Comme vous pouvez le constater, il n'y a pas de différence entre les modificateurs Public et Internal. Cependant, ils se situent à des niveaux différents. N'importe quelle idée est la bienvenue!
Votre diagramme est juste incorrect.
Les membres publics de A.Swift
et B.Swift
sont disponibles pour C.Swift
et D.Swift
. La seule restriction est que les classes ne peuvent pas être sous-classées (elles devraient être open
.
Le manuel Swift Programming Language d’Apple explique clairement ces modificateurs d’accès:
«Swift propose cinq niveaux d'accès différents pour les entités de votre code. Ces niveaux d'accès sont relatifs au fichier source dans lequel une entité est définie et également au module auquel appartient le fichier source.
Accès ouvert et accès public permet aux entités d'être utilisées dans tout fichier source à partir de leur module de définition, ainsi que dans un fichier source provenant d'un autre module qui importe le module de définition. Vous utilisez généralement un accès ouvert ou public lors de la spécification de l'interface publique vers un framework. La différence entre accès ouvert et accès public est décrite ci-dessous.
Accès interne permet aux entités d'être utilisées dans tout fichier source à partir de leur module de définition, mais pas dans aucun fichier source en dehors de ce module. Vous utilisez généralement l’accès interne lors de la définition de la structure interne d’une application ou d’un framework.
File-private access restreint l'utilisation d'une entité à son propre fichier source de définition. Utilisez l'accès privé au fichier pour masquer les détails d'implémentation d'une fonctionnalité spécifique lorsque ces détails sont utilisés dans un fichier entier.
Private access restreint l'utilisation d'une entité à la déclaration suivante. Utilisez un accès privé 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
Extrait de: Apple Inc. «Le langage de programmation Swift (Swift 3.1)», iBooks. https://itun.es/gb/jEUH0.l ”
Tout ce que vous avez marqué public peut être utilisé dans votre application et en dehors de celle-ci (module). Si vous avez marqué quelque chose comme internal qui ne peut être utilisé que dans votre application (module) . Ceci est très utile lorsque vous développez une bibliothèque (framework), vous pouvez utiliser internal pour masquer la structure de la bibliothèque.
Internal - Il s'agit du spécificateur d'accès par défaut dans Swift. Avec cela, nous Pouvons accéder aux membres de données et aux fonctions de membre dans le même module (Cible).
Public - Vous pouvez accéder à tous les membres de données et à leurs fonctions de membre Dans le même module et en dehors de celui-ci. Mais vous ne pouvez pas Sous-classer ou remplacer en dehors du module.
Open - comme public, la seule différence est que vous pouvez sous-classer ou Remplacer en dehors du module.
Fileprivate - Comme son nom l'indique, les membres de données et les fonctions de membre Sont accessibles dans le même fichier.
Private - Vous pouvez y accéder dans le cadre du corps ou de la classe de .