有一种方法可以定义一个枚举,当从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文档所说:



但是通常,如果您想将enum与rawvalue一起使用,则应该有一个可选值,并将nil返回的值视为enum定义之外的默认错误情况。那是我的建议。

10-08 00:59