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) 时,xy 分别绑定到 12。请注意,在这种情况下,<subpattern> 是一个元组模式,其中包含标识符模式。

let 模式 let _“无效”,因为 <subpattern> 中没有标识符模式(通配符模式,在本例中为 _)。因此,当且仅当 <subpattern> 匹配时,let 模式才会匹配,这意味着您根本不需要 let。直接写<subpattern>就可以了。

case .entry0(let x, _):

这将删除警告。

由于 .entry(...) 部分也是一个模式(枚举案例模式),您可以将该部分写为 <subpattern>:

case let .entry0(x, _):

有关模式语法的更多信息,请参阅语言参考的 Patterns 部分。