有没有一种方法可以定义一个枚举,在从“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)
因为正如苹果文档所述:
注意
原始值初始化器是一个可失败的初始化器,因为不是每个原始值都会返回一个枚举成员。有关更多信息,请参见可失败的初始化器。
但一般来说,如果你想使用带有原始值的枚举类型,应该期望一个可选类型,并将返回的nil值视为枚举定义之外的默认错误情况。这是我的建议。