objective c - La propiedad Objective-C es de solo lectura pública, pero tiene un formador privado
properties (2)
Me gustaría usar la sintaxis @property
para declarar una propiedad sintetizada que sea públicamente de solo lectura pero que tenga un setter que pueda ser llamado de manera privada desde dentro de la clase.
Dado que se trata de Objective-C, esto básicamente significa que el método setFoo:
se sintetizaría, pero llamarlo fuera de la clase provocaría una advertencia (selector no reconocido). Para activar la advertencia, debo declarar la propiedad de readonly
; ¿Hay alguna forma de forzar un setter sintetizado que solo esté disponible dentro de la clase?
Creo que lo que estás buscando se llama extensiones de clase. Declararía la propiedad como de solo lectura en el encabezado:
@interface MyClass : NSObject {
}
@property (readonly, assign) NSInteger myInteger;
@end
Luego redeclare en su extensión de clase en el archivo de implementación:
@interface MyClass ()
@property (readwrite, assign) NSInteger myInteger;
@end
@implementation MyClass
@end
Para obtener más información, consulte la documentation de Apple
Podría llegar tarde, pero sin extensión lo hice usando la siguiente técnica
@interface MyClass : NSObject {
NSString * name;
}
@property (readonly, strong) NSString * name;
@end
por otro lado en el archivo de implementación
@implementation MyClass
@synthesize name;
- (id)initWithItems:(NSDictionary *)items {
self = [super init];
if(self)
{
name = @"abc";
}
return self;
}
@end
al hacerlo, establecerá su valor y será accesible como de solo lectura. Gracias.