Swift:具有多种模式的开关盒无法绑定(bind)到变量

标签 swift switch-statement

在官方Swift Programming Language指南,它对开关盒有这样的说法: “...如果 case 包含与控制表达式匹配的多个模式,则这些模式都不能包含常量或变量绑定(bind)。”

包含多个模式是什么意思?

最佳答案

这意味着具有多个模式的 case 标签不能声明变量。

这是允许的:

let somePoint = (1, 1)
switch somePoint {
// Case with multiple patterns without binding
case (0, _),
     (_, 0):
    println("(\(somePoint.0), \(somePoint.1)) is on an axis")
default:
    println("(\(somePoint.0), \(somePoint.1)) is not of an axis")
}

这也是允许的:

let somePoint = (1, 1)
switch somePoint {
// Case with single patterns with binding
case (0, let y):
    println("(0, \(y)) is on an axis")
case (let x, 0):
    println("(\(x), 0) is on an axis")
default:
    println("(\(somePoint.0), \(somePoint.1)) is not of an axis")
}

但是,这是被禁止的:

let somePoint = (1, 1)
switch somePoint {
// Case with multiple patterns that have bindings
case (0, let y),
     (let x, 0):
    println("(\(x), \(y)) is on an axis")
default:
    println("(\(somePoint.0), \(somePoint.1)) is not of an axis")
}

以上会产生错误:

error: 'case' labels with multiple patterns cannot declare variables

关于Swift:具有多种模式的开关盒无法绑定(bind)到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30545503/

相关文章:

c - Switch case 弄乱了我试图转换的数组

ios - UIPickerView - 第一行选择不调用 didSelectRow(在 Swift 中)

swift - 过渡到 UITabBarController

batch-file - Windows 批处理文件中等效的 Switch 语句

java - Switch 语句 请帮助我

java - 程序似乎跳过了 if 语句的一部分,在移回正确位置之前移至 else 语句

ios - Swift 错误 - 无法加载 'MessageKit' 的底层模块

ios - View Controller 透明背景

ios - 如何检测 WatchKit 语音转文本输入的语言?

使用 C 语言中的 switch 和函数的计算器