Что такое эквивалент Objective-C общедоступного свойства get/protected set в С#
Есть ли способ создать свойство вроде этого свойства С# в Objective-C?
public int prop { get; protected set;}
По сути, я хочу, чтобы можно было получить значение вне класса, но только чтобы можно было установить значение из класса.
Ответ 1
Самый простой способ добиться этого - объявить свойство как readonly в открытом интерфейсе для MyClass (т.е. файла .h):
@property (readonly) NSInteger prop;
Затем в файле .m для этого класса объявите класс расширение (категория с пустым именем). В расширениях классов вы можете redeclare @property изменить его способность писать для записи:
Конечно, Objective-C не применяет ограничений доступа, поэтому нет ничего, что вызывало бы вызов какого-либо изгоняющего кода от вызова -[MyClass setProp:]. Компилятор будет отмечать это как предупреждение, однако, что так хорошо, как вы можете получить в Objective-C. К сожалению, нет стандартного способа документировать это "защищенное" свойство записи в подклассы; вам придется согласиться на соглашение для своей команды и поместить его в общедоступную документацию для класса, если он находится в рамках, которые вы собираетесь выпустить.
Ответ 2
Я считаю, что вы ищете атрибут readonly на @property
Нет способа сделать методы @private/@protected в ObjC, эти директивы компилятора применимы только к переменным экземпляра. Вы можете, однако, объявить статическую функцию C в том же файле, чтобы получить метод "@private".
Ответ keno кажется самым правильным способом достижения этого.