你的意思是那样的?
enum ErrorCode: Int { case NoErr = 0,Err1,Err2,LastErr,DefaultErr init(value: Int) { if (value > LastErr.rawValue) { self = .DefaultErr } else { self = ErrorCode(rawValue: value)! } } } let error: ErrorCode = .LastErr let anotherError: ErrorCode = ErrorCode(value: 99)
这是另一种变化:
enum ErrorCode: Int { case NoErr = 0,LastErr init?(value: Int) { if (value > 3) { return nil } else { self = ErrorCode(rawValue: value)! } } } let error: ErrorCode = .LastErr let anotherError: ErrorCode? = ErrorCode(value: 99)
这相当于:
enum ErrorCode: Int { case NoErr = 0,LastErr } let anotherError: ErrorCode? = ErrorCode(rawValue: 99)
因为Apple doc说明:
NOTE
The raw value initializer is a failable initializer,because not every
raw value will return an enumeration member. For more @R_654_4045@ion,see
Failable Initializers.
但一般来说,如果你想使用带有rawvalue的枚举,你应该期望一个可选的,并将nil返回值视为枚举定义之外的默认错误情况.那是我的建议.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。