首页 > 解决方案 > 类型为 OBLIGATORY 枚举值的属性

问题描述

我希望我的类有一个只能从枚举中分配值的属性,这是我的头文件:

@interface Terminal : NSObject

NS_ENUM(NSInteger, TerminalType) {
    tOnline,
    tOffline
};

@property (nonatomic,assign) TerminalType type;

@end

问题是,尽管显然一切都是正确的,但我可以使用 set 为属性分配任何值

Terminal *t = [[Terminal alloc] init];
t.type = 54;

我应该如何实现类,使属性只支持枚举中定义的值?

标签: iosobjective-cenumsproperties

解决方案


Objective-C 枚举是 C 枚举并且 C 枚举允许这样做,尽管您可能会在分配位置收到警告。您可以实现自己的属性设置器,在其中检查所有有效值和@throw其他值NSException

如果NS_CLOSED_ENUM宏适合并且在您的 SDK 中可用,则使用它代替NS_ENUM宏可能是个好主意,因为它明确告诉编译器将来没有其他值将变为有效,这可能会使编译器出现问题对它知道是坏的值的更严格的警告。


推荐阅读