Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
如何表达;不等于;使用带有元组模式匹配的Swift switch语句_Swift - Fatal编程技术网

如何表达;不等于;使用带有元组模式匹配的Swift switch语句

如何表达;不等于;使用带有元组模式匹配的Swift switch语句,swift,Swift,我试图在带有元组的switch语句中使用模式匹配来清楚地表示枚举不等于一个特定情况的所有情况。以下是我的switch语句的缩写版本: switch (source, type, status) { case (.cashVoucher, _, .awaitingValidation): return cashVoucherAwaitingValidationMessageComponants case (.cashVoucher, _, !

我试图在带有元组的switch语句中使用模式匹配来清楚地表示枚举不等于一个特定情况的所有情况。以下是我的switch语句的缩写版本:

switch (source, type, status) {
        case (.cashVoucher, _, .awaitingValidation):
            return cashVoucherAwaitingValidationMessageComponants
        case (.cashVoucher, _, != .awaitingValidation):
            return validatedCashVoucherMessageComponants
        default:
            fatalError("")
        }
由于错误使用!=接线员,但它让你知道我想要实现什么

我希望第一个案例与
.cashconneucher
的来源和
.waitingvalidation
的状态相匹配

我希望第二个案例与源
.cashconneucher
以及除
.waitingvalidation
之外的任何状态相匹配

到目前为止,我可以想到两种解决方案,但它们的可读性不如我所希望的。我可以简单地列出所有其他状态案例,但总共有8个,因此很难阅读。实际上,我可以只使用case
case(.cashconceducer,,,u):
,由于切换案例的顺序,它可以实现我试图实现的目标,但我的切换语句实际上总共有16个案例,依赖于切换案例的顺序,使读者在我看来更难理解


那么,有没有什么方法可以用类似于
!=”的东西来表达这一点呢。等待验证
我有上述内容?

您应该能够将其编写为:

switch (source, type, status) {
case (.cashVoucher, _, let st) where st == .awaitingValidation:
    return cashVoucherAwaitingValidationMessageComponants
case (.cashVoucher, _, let st) where st != .awaitingValidation:
    return validatedCashVoucherMessageComponants
default:
    fatalError("")
}

因此,将元组的第三个值赋给一个常量(此处为
st
),并使用
where
检查是否相等。

您应该能够将其写成:

switch (source, type, status) {
case (.cashVoucher, _, let st) where st == .awaitingValidation:
    return cashVoucherAwaitingValidationMessageComponants
case (.cashVoucher, _, let st) where st != .awaitingValidation:
    return validatedCashVoucherMessageComponants
default:
    fatalError("")
}

因此,将元组的第三个值指定给一个常量(此处为
st
),并使用
where
检查是否相等。

注意,在第一个
案例中,不需要绑定到
st
,您仍然可以说
case(.cashconcreate,u,.waitingvalidation)
。。。。然后第二个案例可以是
case(.cashconneucher,{,}/code>…Martin R,我说明了我不使用这种方法的原因注意,在第一个
案例中,没有必要绑定到
st
,您仍然可以说
case(.cashconneucher,{,}等待验证)
。。。。第二种情况可以是
case(.cashconucher,,)
…Martin R,我已经说明了我不使用这种方法的原因