Dans Swift, quelle est la manière conventionnelle de définir le modèle commun où une propriété doit être en lecture seule en externe, mais modifiable en interne par la classe (et les sous-classes) qui la possèdent.
En Objective-C, il existe les options suivantes:
- Déclarez la propriété en lecture seule dans l'interface et utilisez une extension de classe pour accéder à la propriété en interne. Il s'agit d'un accès basé sur les messages, il fonctionne donc bien avec KVO, atomicité, etc.
- Déclarez la propriété en lecture seule dans l'interface, mais accédez à l'ivar de support en interne. Comme l'accès par défaut pour un ivar est protégé, cela fonctionne bien dans une hiérarchie de classes, où les sous-classes pourront également modifier la valeur, mais le champ est autrement en lecture seule.
En Java, la convention est:
- Déclarez un champ protégé et implémentez un getter (méthode) public en lecture seule.
Quelle est l'idiome de Swift?
la source
var
mot-clé manquant pour le faire compiler.)public
- elle devrait l'êtreinternal
ou rien du tout (ce qui par défaut est la classe -public
ouinternal
) - c'estprivate(set) var readonlyProperty: Int
private
se limite maintenant à la déclaration actuelle (pas au fichier) etfileprivate
est disponible pour la restriction au fichier actuel. A égalementpublic
quelques restrictions etopen
est nécessaire pour aucune restriction. Détails ici .Selon @Antonio, nous pouvons utiliser une seule propriété pour accéder en tant que
readOnly
valeur de propriété publiquement et enreadWrite
privé. Ci-dessous mon illustration:Et voici la sortie:
la source