Свойство Objective-C, которое открыто только для чтения, но имеет частный сеттер
Я хотел бы использовать @property
синтаксис для объявления синтезированного свойства, которое открыто только для чтения, но имеет сеттер, который может быть вызван в частном порядке из класса.
поскольку это Objective-C, это в основном означает, что setFoo:
метод будет синтезирован, но вызов его вне самого класса приведет к предупреждению (нераспознанный селектор). Чтобы вызвать предупреждение, я должен объявить свойство readonly
; есть ли способ заставить синтезированный сеттер, который является доступно только в классе?
2 ответа:
Я думаю, что то, что вы ищете, называется расширением класса. Вы объявите свойство только для чтения в заголовке:
@interface MyClass : NSObject { } @property (readonly, assign) NSInteger myInteger; @end
затем повторно объявите расширение класса в файле реализации:
@interface MyClass () @property (readwrite, assign) NSInteger myInteger; @end @implementation MyClass @end
для получения дополнительной информации проверьте Apple документация
я мог бы опоздать, но без расширения я сделал, используя следующую технику
@interface MyClass : NSObject { NSString * name; } @property (readonly, strong) NSString * name; @end
С другой стороны в реализации файлом
@implementation MyClass @synthesize name; - (id)initWithItems:(NSDictionary *)items { self = [super init]; if(self) { name = @"abc"; } return self; } @end
при этом он установит ваше значение и будет доступен только для чтения. Спасибо.