Свойство Objective-C, которое доступно только для чтения, но имеет частный установщик - PullRequest
63 голосов
/ 15 февраля 2011

Я хотел бы использовать синтаксис @property для объявления синтезированного свойства, которое открыто для чтения, но имеет установщик, который может вызываться конфиденциально из класса.

Поскольку это Objective-C, этов основном означает, что метод setFoo: будет синтезирован, но вызов его вне самого класса приведет к предупреждению (нераспознанный селектор).Чтобы вызвать предупреждение, я должен объявить свойство readonly;Есть ли способ заставить синтезированный сеттер, который доступен только в классе?

Ответы [ 2 ]

102 голосов
/ 15 февраля 2011

Я думаю, то, что вы ищете, называется расширением класса.Вы должны объявить свойство только для чтения в заголовке:

@interface MyClass : NSObject {
}

@property (readonly, assign) NSInteger myInteger;

@end

Затем повторно объявите расширение вашего класса в файле реализации:

@interface MyClass ()

@property (readwrite, assign) NSInteger myInteger;

@end


@implementation MyClass

@end

Для получения дополнительной информации см. Документацию Apple

1 голос
/ 10 мая 2018

Я мог бы опоздать, но без расширения я использовал следующую технику

@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

делая это, он установит ваше значение ибудет доступен как только для чтения.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...