swift - 具有默认值的非失败枚举初始值设定项

标签 swift enums

有没有办法定义一个枚举,当从 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/

相关文章:

ios - 根据您来自的类别为变量赋予不同的值(Swift)

if-statement - Swift 'If' 语句的多个条件?

下载 Alamofire 后快速保存文件

ios - 仅在登录时获取数据

ios - 无法隐藏状态栏—Swift 3,

node.js - Mongoose - 枚举字符串数组

dictionary - 如何使用 Swift 枚举作为字典键? (符合等式)

java - 通过多对多关系将Enum分组到不同条件的有效设计

c# - 枚举设置为字符串并在需要时获取字符串值

java - 对常量使用接口(interface)还是类?