ios - 类型为 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;
我应该如何实现类,使属性只支持枚举中定义的值?
解决方案
Objective-C 枚举是 C 枚举并且 C 枚举允许这样做,尽管您可能会在分配位置收到警告。您可以实现自己的属性设置器,在其中检查所有有效值和@throw
其他值NSException
。
如果NS_CLOSED_ENUM
宏适合并且在您的 SDK 中可用,则使用它代替NS_ENUM
宏可能是个好主意,因为它明确告诉编译器将来没有其他值将变为有效,这可能会使编译器出现问题对它知道是坏的值的更严格的警告。
推荐阅读
- azure - 使用 .NET Core SDK 创建筛选的服务总线订阅
- c# - 在 Web API 中上传单个文件
- angular - 如何从Angular中的Api获取数据到组件中的数组
- sql-server - Microsoft SQL Server - 谁创建了跟踪?
- ios - 使用输入参数初始化 xib
- entity-framework-6 - 如何在骑手上使用 Migrations?
- node.js - 永远在 GoDaddy 上运行 Node.js 应用程序
- apache-kafka - 我的应用程序的 kafka 消费者组消失了
- c# - C# 程序不会在其他计算机上启动。OleDB 命令中的错误
- user-interface - 如何使用 svg 文件而不是直接在 Markdown 中使用 svg 元素从模板中绘制 MDC 复选框刻度线