Switch statement in Swift

后端 未结 7 1611
礼貌的吻别
礼貌的吻别 2020-12-01 01:26

I\'m learning syntax of Swift and wonder, why the following code isn\'t working as I expect it to:

for i in 1...100{

    switch (i){
    case 1:
        Int         


        
7条回答
  •  庸人自扰
    2020-12-01 01:49

    This is a more general answer for people who come here just wanting to know how to use the switch statement in Swift.

    General usage

    switch someValue {
    case valueOne:
        // executable code
    case valueTwo:
        // executable code
    default:
        // executable code
    }
    

    Example

    let someValue = "horse"
    
    switch someValue {
    case "horse":
        print("eats grass")
    case "wolf":
        print("eats meat")
    default:
        print("no match")
    }
    

    Notes:

    • No break statement is necessary. It is the default behavior. Swift switch cases do not "fall through". If you want them to fall through to the code in the next case, you must explicitly use the fallthrough keyword.
    • Every case must include executable code. If you want to ignore a case, you can add a single break statement.
    • The cases must be exhaustive. That is, they must cover every possibly value. If it is not feasible to include enough case statements, a default statement can be included last to catch any other values.

    The Swift switch statement is very flexible. The following sections include some other ways of using it.

    Matching multiple values

    You can match multiple values in a single case if you use separate the values with commas. This is called a compound case.

    let someValue = "e"
    
    switch someValue {
    case "a", "b", "c":
        // executable code
    case "d", "e":
        // executable code
    default:
        // executable code
    }
    

    You can also match whole intervals.

    let someValue = 4
    
    switch someValue {
    case 0..<10:
        // executable code
    case 10...100:
        // executable code
    default:
        // executable code
    }
    

    You can even use tuples. This example is adapted from the documentation.

    let aPoint = (1, 1)
    
    switch aPoint {
    case (0, 0):
        // only catches an exact match for first and second
    case (_, 0):
        // any first, exact second
    case (-2...2, -2...2):
        // range for first and second
    default:
        // catches anything else
    }
    

    Value Bindings

    Sometimes you might want to create a temporary constant or variable from the switch value. You can do this right after the case statement. Anywhere that a value binding is used, it will match any value. This is similar to using _ in the tuple example above. The following two examples are modified from the documentation.

    let anotherPoint = (2, 0)
    
    switch anotherPoint {
    case (let x, 0):
        // can use x here
    case (0, let y):
        // can use y here
    case let (x, y):
        // can use x or y here, matches anything so no "default" case is necessary
    }
    

    You can further refine the matching by using the where keyword.

    let yetAnotherPoint = (1, -1)
    
    switch yetAnotherPoint {
    case let (x, y) where x == y:
        // executable code
    case let (x, y) where x == -y:
        // executable code
    case let (x, y):
        // executable code
    }
    

    Further study

    • This answer was meant to be a quick reference. Please read the full documentation for more. It isn't difficult to understand.

提交回复
热议问题