swift枚举在单个开关案例中获得具有相同参数的多个案例的关联值

时间:2018-08-26 21:27:04

标签: ios swift

这是带有相关值的常见枚举。

enum MultiplierType {
    case width(Double)
    case height(Double)
    case xxxxx1(Double)
    case xxxxx2(Double)
    case xxxxx3(Double)

    var value: Double {
        switch self {
            // Normal way.
            case let .width(value):
                return value
            case let .height(value):
                return value
            case let .xxxxx1(value):
                return value
            ...
        }
    }
}

我的问题是怎么做?

var value: Double {
    switch self {
    // How to get the value in one case?
    case let .width(value), .height(value), .xxx:
         return value
    }
}

var value: Double {
    switch self {
    // How to get the value in one case?
    case let .width, .height, .xxx (value):
         return value
    }
}

获得相关价值的最优雅的方法是什么?

1 个答案:

答案 0 :(得分:8)

您可以将多个枚举值放在同一行case中,但是必须将let移到()中:

var value: Double {
    switch self {
    case .width(let value), .height(let value), .xxxxx1(let value):
         return value
    }
}

您可能希望将每个enum值放在单独的行上:

var value: Double {
    switch self {
    case .width(let value),
         .height(let value),
         .xxxxx1(let value):
         return value
    }
}

不幸的是,这与具有关联值的enum一样优雅。如果没有显式列出enum,就无法获得关联的值。

您只能在同一行中合并具有相同类型关联值的值,并且所有值都必须绑定到相同的变量名。这样,在下面的代码中,无论匹配哪种value模式,您都知道enum是绑定的,其类型是什么。