在switch中使用break语句

时间:2014-06-10 13:27:04

标签: switch-statement swift break

以下是在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).")
}

possibleIntegerValueoptional Int,所以我真的不认为这是在交换机中使用中断的更好示例。而不是休息,即使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根本不需要。任何人都可以给我一个在交换机中使用中断的正确例子,我故意忽略某些情况吗?

这本书说:

  

此行为可用于匹配和忽略a中的一个或多个案例   切换声明。因为Swift的switch语句是详尽无遗的   不允许空案件,有时需要刻意   匹配并忽略一个案例,以使你的意图明确。您   通过将break语句写为案例的整个主体来完成此操作   你想忽略。当这种情况与switch语句匹配时,   案例中的break语句结束了switch语句   立即执行。

2 个答案:

答案 0 :(得分:32)

当您不需要具有任何实际功能的案例时,可以使用break内的switch语句,但希望将其包含在内以使您的逻辑更容易或更清晰。例如,假设您要使用switch语句来确定给定年份是否为闰年。 (这是一个人为的例子。)

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语句中的break语句的第一种情况可以让您捕获年份可被100整除且不能被400整除的情况,因为这些是特殊的非闰年。在这种情况下,{{1}}语句意味着"什么都不做"。

答案 1 :(得分:-1)

Swift语言要求每个switch语句都考虑所有可能的情况。如果switch语句的主题是Character,如您的示例所示,则switch语句必须包含每个可能字符的大小写。由于这显然不切实际,因此只要其他default:个标签都不匹配,也可以添加case标签。

你问,我什么时候必须故意忽略一些案件?答案是,就语言而言,总是需要考虑所有案例,因此,如果switch陈述的主题可能需要您不感兴趣的值 - 不需要进一步处理的值 - 然后您需要添加default个案来捕获这些值。如果您实际上并不想在default案例中执行任何操作,那么语言的语法要求您拥有break语句 - 您不能在default:之间无任何内容以及}声明的结束switch