Ios swift enum在单个开关案例中获取具有相同参数的多个案例的关联值
下面是一个带有关联值的通用枚举Ios swift enum在单个开关案例中获取具有相同参数的多个案例的关联值,ios,swift,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 le
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
}
}
或
获取关联值的最优雅方式是什么?您可以在同一个
案例中放置多个枚举值,但必须将let
移动到()
中:
您可能希望将每个enum
值放在单独的一行上:
var value: Double {
switch self {
case .width(let value),
.height(let value),
.xxxxx1(let value):
return value
}
}
不幸的是,这与带有关联值的enum
s一样优雅。如果不显式列出enum
s,就无法获取关联的值
只能在同一行中组合具有相同类型关联值的值,并且所有值都必须绑定到相同的变量名。这样,在下面的代码中,您知道无论匹配哪个enum
模式,值是绑定的,它的类型是什么。我们知道为什么不能使用default(let value)
吗?必须使用模式匹配来提取枚举案例的关联值<代码>默认值
是一个关键字,而不是模式。也许可以扩展Swift来实现case(let value)
,以匹配具有一个关联值的任何值,但目前它没有这样做。这是一个有趣的想法。
var value: Double {
switch self {
case .width(let value), .height(let value), .xxxxx1(let value):
return value
}
}
var value: Double {
switch self {
case .width(let value),
.height(let value),
.xxxxx1(let value):
return value
}
}