在switch语句中使用break语句

33

以下是在switch语句中使用break语句的示例:

let numberSymbol: Character = "三"  // Simplified Chinese for the number 3
var possibleIntegerValue: Int?
switch numberSymbol {
case "1", "١", "一", "๑":
    possibleIntegerValue = 1
case "2", "٢", "二", "๒":
    possibleIntegerValue = 2
case "3", "٣", "三", "๓":
    possibleIntegerValue = 3
case "4", "٤", "四", "๔":
    possibleIntegerValue = 4
default:
    break
}
if let integerValue = possibleIntegerValue {
    println("The integer value of \(numberSymbol) is \(integerValue).")
} else {
    println("An integer value could not be found for \(numberSymbol).")
}

possibleIntegerValue 是一个可选的整数类型(optional Int),所以我并不认为这是使用 switch 中 break 的更好的示例。与其使用 break,即使 possibleIntegerValue = nil 也可以工作。

let numberSymbol: Character = "三"  // Simplified Chinese for the number 3
var possibleIntegerValue: Int?
switch numberSymbol {
case "1", "١", "一", "๑":
    possibleIntegerValue = 1
case "2", "٢", "二", "๒":
    possibleIntegerValue = 2
case "3", "٣", "三", "๓":
    possibleIntegerValue = 3
case "4", "٤", "四", "๔":
    possibleIntegerValue = 4
default:
    possibleIntegerValue = nil
}
if let integerValue = possibleIntegerValue {
    println("The integer value of \(numberSymbol) is \(integerValue).")
} else {
    println("An integer value could not be found for \(numberSymbol).")
}

因此,在这种情况下,break根本不是必需的。有人能为我提供一个在switch语句中使用break的正确示例吗?在这个示例中,我故意需要忽略一些情况。

书上说:

这种行为可用于匹配和忽略一个或多个case语句。由于Swift的switch语句是详尽无遗的,并且不允许空case,有时需要故意匹配和忽略一个case以明确您的意图。您可以通过将break语句编写为要忽略的case的整个主体来实现此目的。当switch语句匹配该case时,case内的break语句会立即结束switch语句的执行。


2
为什么这个被踩了? - Nate Cook
Swift编程指南iBook中有一个非常棒的章节涉及到这个问题。 - Jack
@NateCook 可能是因为这对语言来说非常基础,并在所有相关的会话视频和文档中得到了重视。 - Jack
9
开关被强调,但与大多数其他语言中的开关/断点相比,break语句的行为相当不标准。我认为这是公平的。 - Nate Cook
1个回答

62
< p >在< code >switch语句中使用< code >break语句可以使您的逻辑更加简单明了,即使您不需要某个case具有任何实际功能,但想要包含它。例如,假设您想使用< code >switch语句来确定给定年份是否为闰年(这是一个有些牵强的例子)。< /p >
func isLeapYear(year: Int) -> Bool {
    switch (year) {
    case let x where (x % 100) == 0 && (x % 400) != 0:
        break
    case let x where (x % 4) == 0:
        return true
    default:
        break
    }

    return false
}

isLeapYear(2014)    // false
isLeapYear(2000)    // true
isLeapYear(1900)    // false

switch语句中的第一个情况是在isLeapYear函数内,用于捕获年份既能被100整除又不能被400整除的情况,因为这些年份是特殊的非闰年。在该情况下使用break语句表示“不执行任何操作”。


2
这段代码比苹果提供的默认代码更加合理。谢谢!(不过对于这个问题,if-else语句会更好一些;-)) - avi
3
开关语句周围的括号不是必需的。因此,switch year { 就足够了。 - Jonny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接