Quel est l'équivalent Objective-C d'un get public / propriété setters protected en C #

voix
19

Est-il possible de créer une propriété comme cette propriété C # en Objective-C?

public int prop { get; protected set;}

Essentiellement, je veux qu'il soit possible d'obtenir la valeur de l'extérieur de la classe, mais d'être seulement capable de définir la valeur à partir de la classe.

Créé 27/08/2009 à 02:36
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
24

La meilleure façon d' y arriver est de déclarer la propriété comme readonlydans l'interface publique pour MyClass(le fichier .h):

@property (readonly) NSInteger prop;

Ensuite, dans le fichier .m pour cette classe, déclarer une classe étendue (une catégorie avec un nom vide). Dans les extensions de classe, vous pouvez redéclarer un @property pour changer son writeability READWRITE:

@interface MyClass ()
@property (readwrite) NSInteger prop;
@end

@implementation MyClass
@synthesize prop;
...
@end

Bien sûr, Objective-C n'impose pas de restrictions d'accès, donc il n'y a rien qui empêche un code voyou d'appeler -[MyClass setProp:]. Le compilateur signaleront cela comme un avertissement, mais qui est aussi bon que vous pouvez obtenir en Objective-C. Malheureusement, il n'y a aucun moyen standard pour documenter cette « protégée » propriété inscriptible aux sous - classes; vous aurez à régler sur une convention pour votre équipe et ou le mettre dans la documentation publique pour la classe si elle est dans un cadre que vous allez libérer.

Créé 27/08/2009 à 05:24
source utilisateur

voix
1

Il n'y a aucun moyen de rendre les méthodes @ privé / @ protégées ObjC, ces directoves compilateur appliquent uniquement sur les variables d'instance. Vous pouvez toutefois déclarer une fonction statique C dans le même fichier pour obtenir une méthode « @private ».

La réponse de keno semble que la plupart de manière correcte d'y parvenir.

Créé 27/08/2009 à 03:02
source utilisateur

voix
1

Je crois que vous êtes à la recherche de l'attribut lecture seule sur le @property

@property (readonly) NSInteger prop;

En savoir plus ici .

Créé 27/08/2009 à 02:44
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more