Vous devrez créer des accesseurs personnalisés si vous souhaitez restreindre les valeurs d'un enum. Donc, tout d'abord, vous devez déclarer un enum, comme ceci :
typedef enum {
kPaymentFrequencyOneOff = 0,
kPaymentFrequencyYearly = 1,
kPaymentFrequencyMonthly = 2,
kPaymentFrequencyWeekly = 3
} PaymentFrequency;
Ensuite, déclarez les getters et setters pour votre propriété. C'est une mauvaise idée de remplacer ceux qui existent déjà, car les accesseurs standard attendent un objet NSNumber plutôt qu'un type scalaire, et vous aurez des problèmes si quelque chose dans les bindings ou les systèmes KVO essaie d'accéder à votre valeur.
- (PaymentFrequency)itemTypeRaw {
return (PaymentFrequency)[[self itemType] intValue];
}
- (void)setItemTypeRaw:(PaymentFrequency)type {
[self setItemType:[NSNumber numberWithInt:type]];
}
Enfin, vous devez mettre en œuvre + keyPathsForValuesAffecting<Key>
afin que vous receviez des notifications KVO pour itemTypeRaw lorsque itemType change.
+ (NSSet *)keyPathsForValuesAffectingItemTypeRaw {
return [NSSet setWithObject:@"itemType"];
}