J'essaie de déclarer une propriété d'instance dans Swift afin qu'elle ne soit visible que pour sa classe et ses sous-classes. Je pense que cela serait appelé une propriété protégée dans d'autres langues. moyen d'y parvenir dans Swift?
Le contrôle d'accès le long des lignes d'héritage ne correspond pas vraiment aux philosophies de conception derrière Swift et Cocoa:
Lors de la conception des niveaux de contrôle d'accès dans Swift, nous avons considéré deux cas d'utilisation principaux:
- garder
private
les détails d'une classe cachés du reste de l'application- garder
internal
détails d'un framework caché de l'application clienteIls correspondent respectivement aux niveaux d'accès
private
etinternal
.En revanche,
protected
associe l'accès à l'héritage, ajoutant un axe de contrôle entièrement nouveau pour raisonner. Il n'offre en fait aucune protection réelle, car une sous-classe peut toujours exposer l'API "protégée" via une nouvelle méthode ou propriété publique. Il n'offre pas non plus d'opportunités d'optimisation supplémentaires, car de nouveaux remplacements peuvent provenir de n'importe où. Et c'est inutilement restrictif - il permet aux sous-classes, mais à aucun des assistants de la sous-classe, d'accéder à quelque chose.
Il y a plus d'explications sur le Swift d'Apple.
Une façon de le faire est de définir la fonction ou la propriété avec le mot clé fileprivate
et de définir la sous-classe dans le même fichier comme suit:
class Parent {
fileprivate var someProperty: Any?
}
class Child: Parent {
func someFunction() {
print(someProperty)
}
}
Bien sûr, c'est super ennuyeux, car ce fichier sera un énorme gâchis. Sans oublier pourquoi Swift permet cela mais pas protected
est juste ... argh.