属性 其类型是 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,在其中检查所有有效值,否则 @throwNSException

如果 NS_CLOSED_ENUM 宏适合并且在您的 SDK 中可用,使用它而不是 NS_ENUM 宏可能是个好主意,因为它明确告诉编译器没有其他值将在未来生效,这可能会使编译器对已知的错误值发出更严格的警告。