我希望有类型注释(因此类型受限,除非我误解)模式匹配,如下所示:
func F<T1, T2>(_ t: (T1, T2)) {
switch t {
case let (x: Int, y: String):
// do something
default:
// do something else
}
}但是我显然做错了什么,因为我在Tuple pattern element label 'x' must be '_'行上得到了一个case let (x: Int, y: String):编译器错误。
case let (x, y):工作,但无法匹配类型(x和y绑定到任何类型)。
查看Swift编程语言(SWIF5.6beta)中的语法,
<case> <pattern>:
<case> <value-binding-pattern>:
<case> let <pattern>:
<case> let <tuple-pattern> <type-annotation opt>:
<case> let (<tuple-pattern-element-list>) <type-annotation opt>:
<case> let (<tuple-pattern-element-list>) <type-annotation opt>:
<case> let (<tuple-pattern-element>, <tuple-pattern-element>) <type-annotation opt>:
<case> let (<tuple-pattern-element>, <tuple-pattern-element>) <type-annotation opt>:
<case> let (<pattern>, <pattern>) <type-annotation opt>:
<case> let (<identifier-pattern>, <identifier-pattern>) <type-annotation opt>:
<case> let (<identifier>, <identifier>) <type-annotation opt>:
...所以我觉得这样说也没问题
func F<T1, T2>(_ t: (T1, T2)) {
switch t {
case let (x, y) : (Int, String):
...但我所有这样的尝试都以这样或那样的方式不幸地失败了(不要编译)。
在元组项值被绑定并且我也可以约束元组元素的类型的情况下,有什么正确的方法来完成这种匹配?
发布于 2022-03-14 21:21:36
语法是:
func F<T1, T2>(_ t: (T1, T2)) {
switch t {
case let (x, y) as (Int, String):
// do something
default:
// do something else
}
}https://stackoverflow.com/questions/71474328
复制相似问题