Я столкнулся с довольно распространенным сценарием в Objective-C, где я передаю переменную методу инициализации, а затем хочу назначить ее переменной экземпляра с тем же именем. Однако я не нашел способа охватить переменные, чтобы уточнить, какое значение из аргумента сообщения, а какое - переменная экземпляра.
Скажем, у меня есть класс, например следующий:
@interface MyObject
{
NSString *value;
}
- (id)initWithValue:(NSString *)value;
@end
В моей реализации я хочу, чтобы мой метод инициализации выглядел примерно так:
- (id)initWithValue:(NSString *)value
{
self = [super init];
if(self) {
self.value = value; // This will not work with instance variables
}
}
Я знаю три решения:
self.value
_value
initValue
или argValue
Мне не нравится любое из этих решений. Добавление свойства либо делает его общедоступным в интерфейсе, либо, если я использую расширение, скрывает его от наследников. Мне также не нравится использовать разные имена для переменных или подчеркивание, что, возможно, связано с разработкой на других языках, таких как Java и C #.
Есть ли способ отделить переменные экземпляра от аргументов сообщения? Если нет, есть ли в Какао руководство по кодированию для решения этой проблемы? Мне нравится следовать руководствам по стилю, когда это необходимо.
Обновление
Подумав, как это сделать в C, я пришел к решению self-> value
. Это работает, но выдает предупреждение компилятора о том, что Локальное объявление 'value' скрывает переменную экземпляра. Так что это тоже не удовлетворительное решение, так как у меня цель нулевого предупреждения.