Swift enum - switch 语句匹配关联值警告
Swift enum - switch statement matching associated values warning
我在 Swift 中有一个声明关联值的枚举,以及一个试图在该条目的特定位置获取值的方法:
enum myEnum {
case entry0(Float=0.0, Float=0.0)
...
}
var entry0XValue: Float {
switch self {
case .entry0(let x, let _):
return x
default:
return 0
}
}
代码有效,但我遇到的问题是当我编译它时,编译器发出警告:
'let' pattern has no effect; sub-pattern didn't bind any variables
这是指大小写开关中的下划线。有什么方法可以重写它以删除此警告吗?
像这样拼写
case .entry0(let x, _):
或喜欢
case let .entry0(x, _):
哪个更普遍,如:
case let .entry0(x, y):
let <subpattern>
模式的作用是,当匹配模式时,它将值绑定到 <subpattern>
中出现的标识符模式。例如,当您将 .entry0(let x, let _)
中的 x
与 switch 语句中的 MyEnum.entry0(0.0, 0.0)
匹配时,它会绑定到 0.0。另一个示例:当您执行 let (x, y) = (1, 2)
时,x
和 y
分别绑定到 1
和 2
。请注意,在这种情况下,<subpattern>
是一个元组模式,其中包含标识符模式。
let
模式 let _
“无效”,因为 <subpattern>
中没有标识符模式(通配符模式,在本例中为 _
)。因此,当且仅当 <subpattern>
匹配时,let
模式才会匹配,这意味着您根本不需要 let
。直接写<subpattern>
就可以了。
case .entry0(let x, _):
这将删除警告。
由于 .entry(...)
部分也是一个模式(枚举案例模式),您可以将该部分写为 <subpattern>
:
case let .entry0(x, _):
有关模式语法的更多信息,请参阅语言参考的 Patterns 部分。
我在 Swift 中有一个声明关联值的枚举,以及一个试图在该条目的特定位置获取值的方法:
enum myEnum {
case entry0(Float=0.0, Float=0.0)
...
}
var entry0XValue: Float {
switch self {
case .entry0(let x, let _):
return x
default:
return 0
}
}
代码有效,但我遇到的问题是当我编译它时,编译器发出警告:
'let' pattern has no effect; sub-pattern didn't bind any variables
这是指大小写开关中的下划线。有什么方法可以重写它以删除此警告吗?
像这样拼写
case .entry0(let x, _):
或喜欢
case let .entry0(x, _):
哪个更普遍,如:
case let .entry0(x, y):
let <subpattern>
模式的作用是,当匹配模式时,它将值绑定到 <subpattern>
中出现的标识符模式。例如,当您将 .entry0(let x, let _)
中的 x
与 switch 语句中的 MyEnum.entry0(0.0, 0.0)
匹配时,它会绑定到 0.0。另一个示例:当您执行 let (x, y) = (1, 2)
时,x
和 y
分别绑定到 1
和 2
。请注意,在这种情况下,<subpattern>
是一个元组模式,其中包含标识符模式。
let
模式 let _
“无效”,因为 <subpattern>
中没有标识符模式(通配符模式,在本例中为 _
)。因此,当且仅当 <subpattern>
匹配时,let
模式才会匹配,这意味着您根本不需要 let
。直接写<subpattern>
就可以了。
case .entry0(let x, _):
这将删除警告。
由于 .entry(...)
部分也是一个模式(枚举案例模式),您可以将该部分写为 <subpattern>
:
case let .entry0(x, _):
有关模式语法的更多信息,请参阅语言参考的 Patterns 部分。