有没有办法定义枚举,从rawValue
初始化时默认为某个值而不是失败?在值可能意外(即服务器API错误)的情况下很有用
答案 0 :(得分:4)
你的意思是什么?
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 doc所说的那样:
请注意
原始值初始化程序是一个可用的初始化程序,因为不是每个 原始值将返回枚举成员。有关更多信息,请参阅 可用的初始化器。
但一般来说,如果你想使用带有rawvalue的枚举,你应该期望一个可选的,并将nil返回值视为枚举定义之外的默认错误情况。那是我的建议。