是否可以在Swift模式匹配并同时提取初始值(现在转换)?
例如,如果我有这些枚举:
enum Inner {
case a(Int)
case b(Int)
}
enum Outer {
case one
case two(Inner)
}
我希望匹配Outer.two(Inner.a(1))
并同时对其进行变量
let value: Any // Could be anything :|
switch value {
case let a as Outer.two(Inner.a(1)):
// Do something which needs `a`
default"
// Do some other things
}
显然,这不起作用,因为as
只会转换为类型。
我也试过
case Outer.two(let a) where a == Inner.a(1):
case let Outer.two(.a(1)) = a: // i.e. the syntax in "guard case let ..."
不起作用。 (注意,第一个会起作用,但实施==
对我来说不是一个选择,令人讨厌)
仅供参考:Scala允许您使用@
运算符执行此操作,如下所示:
case a @ Outer.two(Inner.a(1)):
是否有可以执行此操作的语法,或者我是否需要重新考虑如何解决我的问题?
答案 0 :(得分:0)
我认为没有相同的模式
斯威夫特的case a @ Outer.two(Inner.a(1)):
。这是可能的
解决方法:
switch value {
case Outer.two(Inner.a(1)):
let a = Inner.a(1)
// Do something which needs `a`
default:
// Do some other things
}