objective-c properties

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.