Что является Objective-C эквивалентом общедоступного свойства get / protected set в C # - PullRequest
19 голосов
/ 27 августа 2009

Есть ли способ создать свойство, подобное этому свойству C #, в Objective-C?

public int prop { get; protected set;}

По сути, я хочу сделать возможным получение значения из-за пределов класса, но иметь возможность устанавливать значение только из класса.

Ответы [ 3 ]

24 голосов
/ 27 августа 2009

Самый простой способ сделать это - объявить свойство как readonly в общедоступном интерфейсе для MyClass (т.е. файл .h):

@property (readonly) NSInteger prop;

Затем в файле .m для этого класса объявите класс расширение (категория с пустым именем). В расширениях классов вы можете переопределить @property, чтобы изменить возможность его записи на чтение-запись:

@interface MyClass ()
@property (readwrite) NSInteger prop;
@end

@implementation MyClass
@synthesize prop;
...
@end

Конечно, Objective-C не применяет ограничения доступа, поэтому ничто не мешает некоторому мошенническому коду вызывать -[MyClass setProp:]. Однако компилятор пометит это как предупреждение, что так же хорошо, как вы можете получить в Objective-C. К сожалению, не существует стандартного способа документировать это «защищенное» свойство записи для подклассов; вам придется согласиться на соглашение для вашей команды и или поместить его в общедоступную документацию для класса, если оно находится в рамках, который вы собираетесь выпустить.

1 голос
/ 27 августа 2009

Нет способа сделать методы @ private / @ защищенными в ObjC, эти директивы компилятора применяются только к переменным экземпляра. Однако вы можете объявить статическую функцию C в том же файле, чтобы получить метод "@private".

Ответ Кено кажется наиболее правильным способом достижения этого.

1 голос
/ 27 августа 2009

Я полагаю, вы ищете атрибут readonly в @ property

@property (readonly) NSInteger prop;

Подробнее здесь .

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