Не могу понять 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 использует сгенерированные методы доступа и, вероятно, это то, что вы хотите использовать, это будет свидетельством того, что в будущем вы захотите переопределить метод получения / установки для обновления другого значения.

Другие вопросы по тегам