我们能否使用`if`或者`guard`语句代替`switch`语句来提取枚举值?

3

我定义了一个枚举,并创建了一个计算属性来提取与其中一个情况相关联的值。我使用 switch 语句编写了这个计算过程:

enum NetworkResult<T> {
    case json(T)
    case error(Error)

    var error: Error? {
        switch self {
        case .error(let error):
            return error
        default:
            return nil
        }
    }
}

没有使用switch关键字,是否可能实现相同的计算属性?(例如,使用if let结构)

2个回答

4
enum NetworkResult<T> {
    case json(T)
    case error(Error)

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

        guard case let .error(error) = self else {
            return nil
        }

        return error

1
哦,if caseguard case,谢谢! - Cœur

1
通过尝试 Peter Cheng 建议的 if case 结构,我实际上找到了多种编写方式。
let 放在外面:
var error: Error? {
    if case let .error(error) = self {
        return error
    }
    return nil
}

通过在内部使用let

var error: Error? {
    if case .error(let error) = self {
        return error
    }
    return nil
}

而守卫的等效物...

通过将 let 放在外面:

var error: Error? {
    guard case let .error(error) = self else {
        return nil
    }
    return error
}

通过在内部使用let

var error: Error? {
    guard case .error(let error) = self else {
        return nil
    }
    return error
}

最后一种解决方案是我个人最喜欢的语法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接