web-dev-qa-db-fra.com

Utilisation de l'instruction break dans le commutateur

Voici l'exemple donné pour l'utilisation des instructions break dans switch:

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 est optional Int, donc je ne trouve vraiment pas cela comme un meilleur exemple d'utilisation des ruptures de commutateur. Au lieu de pause, même possibleIntegerValue = nil fonctionne également.

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).")
}

Dans ce cas, break n'est pas du tout requis. Quelqu'un peut-il me donner un bon exemple d'utilisation des ruptures de commutateur, où je dois délibérément ignorer certains cas?

Le livre dit:

Ce comportement peut être utilisé pour faire correspondre et ignorer un ou plusieurs cas dans une instruction switch. Étant donné que l'instruction switch de Swift est exhaustive et n'autorise pas les cas vides, il est parfois nécessaire de faire délibérément correspondre et d'ignorer un cas afin de rendre vos intentions explicites. Pour ce faire, vous écrivez l'instruction break en tant que corps entier du cas que vous souhaitez ignorer. Lorsque ce cas correspond à l'instruction switch, l'instruction break à l'intérieur du cas met immédiatement fin à l'exécution de l'instruction switch.

21
avi

L'instruction break à l'intérieur d'un switch peut être utilisée lorsque vous n'avez pas besoin d'un cas pour avoir une fonctionnalité réelle, mais que vous souhaitez l'inclure pour rendre votre logique plus facile ou plus claire. Supposons par exemple que vous souhaitiez utiliser une instruction switch pour déterminer si une année donnée est une année bissextile ou non. (Ceci est un peu un exemple artificiel.)

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

Le premier cas de l'instruction switch à l'intérieur de isLeapYear vous permet de piéger les cas où l'année est à la fois divisible par 100 et non divisible par 400, car ce sont en quelque sorte les années exceptionnelles non bissextiles. L'instruction break dans ce cas signifie "ne rien faire".

43
Nate Cook