Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift enum在单个开关案例中获取具有相同参数的多个案例的关联值_Ios_Swift - Fatal编程技术网

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
    }
}