web-dev-qa-db-ja.com

スイッチでの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はまったく必要ありません。誰かが私が意図的にいくつかのケースを無視しなければならない場合にスイッチでブレークを使用する適切な例を私に与えることができますか?

本は言う:

この動作を使用して、switchステートメントの1つ以上のケースを照合および無視できます。 Swiftのswitchステートメントは網羅的で空のケースを許可しないため、意図を明確にするために、意図的にケースを一致させて無視することが必要になる場合があります。これを行うには、breakステートメントを無視するケースの本文全体として記述します。そのケースがswitchステートメントと一致すると、ケース内のbreakステートメントは、switchステートメントの実行をすぐに終了します。

21
avi

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ステートメントの最初のケースでは、年が100で割り切れる場合と400で割り切らない場合の両方のケースをトラップできます。その場合のbreakステートメントは、「何もしない」ことを意味します。

43
Nate Cook