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

rya*_*ete 1 enums swift

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

enum Result {
    case success(object: AnyObject)
    case failure(errorMessage: String)
    case reauthenticate(errorMessage: String)
}
Run Code Online (Sandbox Code Playgroud)

我想以相同的方式处理failurereauthenticate案例,但也需要访问相关的值.Swift中是否有语言功能让我在failure不丢失errorMessage 的情况下完成这个案例?就像是:

switch result {
    case .success(_):
        // ...
    case .failure(let errorMessage): fallthrough
    case .reauthenticate(let errorMessage:
        print(errorMessage)
}
Run Code Online (Sandbox Code Playgroud)

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

Ham*_*ish 5

您不能fallthrough在此处使用,但是您可以将多个案例与关联值匹配,并且只要每个变量绑定的模式匹配,就绑定关联的值,并且为每个模式绑定的值共享相同的类型(s) - 根据SE-0043.

因此你可以说:

switch result {
case .success:
    print("success")
case .failure(let errorMessage), .reauthenticate(let errorMessage):
    print(errorMessage)
}
Run Code Online (Sandbox Code Playgroud)