有没有办法定义一个枚举,当从 rawValue
初始化时将默认为某个值而不是失败?在值可能出乎意料的情况下很有用(即服务器 API 错误)
最佳答案
你是说类似的意思吗?
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, Err1, Err2, 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, Err1, Err2, LastErr
}
let anotherError: ErrorCode? = ErrorCode(rawValue: 99)
因为正如 Apple 文档所述:
NOTE
The raw value initializer is a failable initializer, because not every raw value will return an enumeration member. For more information, see Failable Initializers.
但一般来说,如果你想将枚举与原始值一起使用,你应该期待一个可选的并将 nil 返回值视为枚举定义之外的默认错误情况。这是我的建议。
关于swift - 具有默认值的非失败枚举初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633981/