J'aimerais utiliser le @property
syntaxe pour déclarer une propriété synthétisée qui est publiquement en lecture seule mais qui a un setter qui peut être appelé en privé depuis la classe.
Puisque c'est Objective-C, cela signifie essentiellement que le setFoo:
serait synthétisée, mais l'appeler en dehors de la classe elle-même entraînerait un avertissement (sélecteur non reconnu). Pour déclencher l'avertissement, je dois déclarer la propriété readonly
; existe-t-il un moyen de forcer un setter synthétisé qui n'est disponible que dans la classe?
Je pense que ce que vous recherchez s'appelle des extensions de classe. Vous déclareriez la propriété en lecture seule dans l'en-tête:
@interface MyClass : NSObject {
}
@property (readonly, assign) NSInteger myInteger;
@end
Ensuite, redéclarez dans votre extension de classe dans le fichier d'implémentation:
@interface MyClass ()
@property (readwrite, assign) NSInteger myInteger;
@end
@implementation MyClass
@end
Pour en savoir plus, consultez Apple's documentation
Je suis peut-être en retard, mais sans extension, j'ai utilisé la technique suivante
@interface MyClass : NSObject {
NSString * name;
}
@property (readonly, strong) NSString * name;
@end
d'autre part dans le fichier d'implémentation
@implementation MyClass
@synthesize name;
- (id)initWithItems:(NSDictionary *)items {
self = [super init];
if(self)
{
name = @"abc";
}
return self;
}
@end
ce faisant, il définira votre valeur et sera accessible en lecture seule. Merci.