无需开关即可确定通用枚举中的参数值

时间:2018-10-14 13:41:29

标签: swift

这是我的代码:

public enum Result<T> {
    case succes(data: T), error(resultError: ResultError)

    // Is this possible without the switch?
    public var error: ResultError? {
        switch self {
        case .succes(_):
            return nil
        case .error(let resultError):
            return resultError
        }
    }
}

public enum ResultError: Int {
    case someError = -777
}

我想知道是否可以通过某种方式检查self是否可以有条件地转换为大小写error并返回该值,否则返回nil,而无需进行切换。

我尝试使用Guard语句,但失败:

guard let _error = self as? Result.error

1 个答案:

答案 0 :(得分:3)

别忘了有if case语句,它以类似if的样式进行模式匹配:

public var error: ResultError? {
    if case .error(let e) = self {
        return e
    } else {
        return nil
    }
}

使用开关没有错。我认为它比if case更好,而且可读性更好。