it-swarm-ru.tech

Свойство Objective-C, которое доступно только для чтения, но имеет частный установщик

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

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

63
Adam Ernst

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

@interface MyClass : NSObject {
}

@property (readonly, assign) NSInteger myInteger;

@end

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

@interface MyClass ()

@property (readwrite, assign) NSInteger myInteger;

@end


@implementation MyClass

@end

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

101
Sean Rich

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

@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

это установит ваше значение и будет доступно только для чтения. Благодарю.

1
Majid Bashir