可能通过枚举案但仍然使用其相关值?

时间:2017-02-22 19:22:27

标签: swift enums

我有一个带有关联值的Result枚举:

enum Result {
    case success(object: AnyObject)
    case failure(errorMessage: String)
    case reauthenticate(errorMessage: String)
}

我希望以相同的方式处理failurereauthenticate个案,但也需要访问相关的值。 Swift中是否有语言功能让我在不丢失errorMessage的情况下通过failure案例?类似的东西:

switch result {
    case .success(_):
        // ...
    case .failure(let errorMessage): fallthrough
    case .reauthenticate(let errorMessage:
        print(errorMessage)
}

我知道还有其他方法可以解决这个问题。例如,我可以在errorMessage上添加计算的Result var。我的问题是它是否可以在switch语句中完成(使用fallthrough或其他方法)。

1 个答案:

答案 0 :(得分:5)

你不能在这里使用fallthrough,但是可以匹配多个具有关联值的情况,并且只要每个变量绑定的模式匹配,就绑定相关的值,并且每个模式的值绑定共享相同的类型 - 按SE-0043

因此你可以说:

switch result {
case .success:
    print("success")
case .failure(let errorMessage), .reauthenticate(let errorMessage):
    print(errorMessage)
}