Comment rendre une propriété d'instance visible uniquement à la sous-classe swift
Je suis en train de déclarer une instance de la propriété rapide, de sorte qu'il n'est visible que pour c'est classe et sous-classes. Je crois que ce serait désigné comme un bien protégé dans d'autres langues. Est-il un moyen pour atteindre cet objectif dans Swift?
source d'informationauteur nwales
Vous devez vous connecter pour publier un commentaire.
De contrôle d'accès le long de l'héritage de lignes n'est pas vraiment bon avec les philosophies de conception derrière Swift et de Cacao:
Il y a d'autres explications sur l'Apple Swift blog.
J'ai trouvé un moyen (pas le bon moyen, selon d'autres standards langages de programmation orientés objet).
Vous définissez à la fois de la classe de base et la sous-classe en un seul .swift fichier. Vous pouvez accéder aux champs privés de votre classe de base.
Ci-dessous remorque classes sont définies dans BaseClass.swift fichier
Cela donnera à votre sous-classe de la capacité à accéder aux variables privées.
Assurez-vous de définir à la fois de la classe de base et la sous-classe dans la même swift fichier.
Mais il y a encore un problème ici. Les questions de sécurité. Vous pouvez le permettent pas toujours d'une sous-classe pour accéder à votre parent de la classe de champs privés. Pour cela, vous pouvez définir une extension de votre sous-classe, où les parents de la classe de membres privés sont inaccessibles. Essayez juste une fois.
Cette extension est définie dans la sous-classe.swift fichier.
Si vous êtes d'accord avec cette utilisation, sinon attendre jusqu'Apple s'engage à utiliser protégé modificateur de Swift dans la prochaine version (pas sûr 3.1 ou 3.x ou v4.0 a des plans de soutien).
Une façon de le faire est de définir la fonction ou propriété avec
fileprivate
de mots clés et de définir la sous-classe dans le même fichier comme ceci:Bien sûr, c'est super gênant, étant donné que le fichier sera un énorme gâchis. Pour ne pas mentionner pourquoi Swift permet cela, mais pas
protected
est juste... argh.