Я говорю константу Ваши параметры, передаваемые по значению.
Рассматривают эту ошибочную функцию:
bool isZero(int number)
{
if (number = 0) // whoops, should be number == 0
return true;
else
return false;
}
, Если бы параметр числа был константой, компилятор остановил бы и предупредил бы нас об ошибке.
Вам нужно будет создать собственные средства доступа, если вы хотите ограничить значения перечислением. Итак, сначала вы должны объявить перечисление, например:
typedef enum {
kPaymentFrequencyOneOff = 0,
kPaymentFrequencyYearly = 1,
kPaymentFrequencyMonthly = 2,
kPaymentFrequencyWeekly = 3
} PaymentFrequency;
Затем объявите методы получения и установки для вашего свойства. Заменять существующие - плохая идея, поскольку стандартные аксессоры ожидают объект NSNumber, а не скалярный тип, и вы столкнетесь с проблемами, если что-нибудь в привязках или системах KVO попытается получить доступ к вашему значению.
- (PaymentFrequency)itemTypeRaw {
return (PaymentFrequency)[[self itemType] intValue];
}
- (void)setItemTypeRaw:(PaymentFrequency)type {
[self setItemType:[NSNumber numberWithInt:type]];
}
Наконец, вам следует реализовать + keyPathsForValuesAffecting
, чтобы получать уведомления KVO для itemTypeRaw при изменении itemType.
+ (NSSet *)keyPathsForValuesAffectingItemTypeRaw {
return [NSSet setWithObject:@"itemType"];
}
Альтернативный подход, который я рассматриваю, заключается в том, чтобы вообще не объявлять перечисление, а вместо этого объявлять значения как методы категорий в NSNumber.