Не могу понять NS_ENUM. Могу ли я изменить значения внутри него?
Я ОЧЕНЬ новичок в Objective-C. У меня была проблема с этим:
NS_ENUM(NSUInteger, SetOfValues)
{
firstRow = 0,
secondRow,
thirdRow,
rowCount
};
Теперь мне нужно изменить эти переменные в реализациях:
@implementation BillyBurroughs
...
- (void) modifyrowInformation
{
secondRow = 0;
thirdRow = 1;
rowCount = 2
}
@end
Но, конечно, я получаю сообщение об ошибке - не могу присвоить значение. Теперь я могу просто читать переменные в локальные переменные, такие как
+ (void) initialize {
localFirstRow = 0
...
}
и затем измените их, но есть ли более чистый и ленивый способ сделать это без дополнительных переменных? Извините, если это очень простой вопрос. Я ценю ваш вклад.
1 ответ
Перечисления являются константами, вы не можете изменить их значение, и почему вы хотите? вот для чего ивары.
NS_ENUM
хороший макрос, который нам дало яблоко, которое расширяется до следующего:
typedef enum {
firstRow = 0,
secondRow,
thirdRow,
rowCount,
} SetOfValues;
Примечание: 0 инициализируется по умолчанию для первого элемента, если не указано иное.
Хорошей практикой также является использование пространства имен для перечислений, чтобы избежать коллизий, возможно, взгляните на реализацию яблок и примените ее к вашему собственному сценарию использования:
typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
UITableViewCellStyleDefault,
UITableViewCellStyleValue1,
UITableViewCellStyleValue2,
UITableViewCellStyleSubtitle
};
Может быть, вы ищете свойство или массив?
array = @[ @1, @2, @3, @4 ];
редактировать вопрос в комментариях:
В вашем файле реализации (.m) вы можете создать приватный заголовок:
@interface OKAClass ()
@property (nonatomic, assign) NSUInteger property;
@end
Затем вы можете получить доступ к свойству из этого класса, используя self
или же _property
например
self.property = 1;
или же
_property = 1;
Разница в том, что self.property
использует сгенерированные методы доступа и, вероятно, это то, что вы хотите использовать, это будет свидетельством того, что в будущем вы захотите переопределить метод получения / установки для обновления другого значения.