属性 其类型是 OBLIGATORY 枚举值
Property whose type is OBLIGATORY an enum value
我希望我的 class 有一个只能从枚举中赋值的 属性,这是我的头文件:
@interface Terminal : NSObject
NS_ENUM(NSInteger, TerminalType) {
tOnline,
tOffline
};
@property (nonatomic,assign) TerminalType type;
@end
问题是,尽管显然一切都是正确的,但我可以使用集合
将任何值分配给 属性
Terminal *t = [[Terminal alloc] init];
t.type = 54;
我应该如何实现class使得属性只支持枚举中定义的值?
Objective-C 枚举是 C 枚举,C 枚举允许这样做,尽管您可能会在赋值位置收到警告。您可以实现自己的 属性 setter,在其中检查所有有效值,否则 @throw
和 NSException
。
如果 NS_CLOSED_ENUM
宏适合并且在您的 SDK 中可用,使用它而不是 NS_ENUM
宏可能是个好主意,因为它明确告诉编译器没有其他值将在未来生效,这可能会使编译器对已知的错误值发出更严格的警告。
我希望我的 class 有一个只能从枚举中赋值的 属性,这是我的头文件:
@interface Terminal : NSObject
NS_ENUM(NSInteger, TerminalType) {
tOnline,
tOffline
};
@property (nonatomic,assign) TerminalType type;
@end
问题是,尽管显然一切都是正确的,但我可以使用集合
将任何值分配给 属性Terminal *t = [[Terminal alloc] init];
t.type = 54;
我应该如何实现class使得属性只支持枚举中定义的值?
Objective-C 枚举是 C 枚举,C 枚举允许这样做,尽管您可能会在赋值位置收到警告。您可以实现自己的 属性 setter,在其中检查所有有效值,否则 @throw
和 NSException
。
如果 NS_CLOSED_ENUM
宏适合并且在您的 SDK 中可用,使用它而不是 NS_ENUM
宏可能是个好主意,因为它明确告诉编译器没有其他值将在未来生效,这可能会使编译器对已知的错误值发出更严格的警告。