SwiftPamphletApp icon indicating copy to clipboard operation
SwiftPamphletApp copied to clipboard

Switch

Open ming1016 opened this issue 4 years ago • 1 comments

func f1(pa: String, t:(String, Int)) {
    var p1 = 0
    var p2 = 10
    switch pa {
    case "one":
        p1 = 1
    case "two":
        p1 = 2
        fallthrough // 继续到下个 case 中
    default:
        p2 = 0
    }
    print("p1 is \(p1)")
    print("p2 is \(p2)")
    
    // 元组
    switch t {
    case ("0", 0):
        print("zero")
    case ("1", 1):
        print("one")
    default:
        print("no")
    }
}

f1(pa: "two", t:("1", 1))
/*
 p1 is 2
 p2 is 0
 one
 */

// 枚举
enum E {
    case one, two, three, unknown(String)
}

func f2(pa: E) {
    var p: String
    switch pa {
    case .one:
        p = "1"
    case .two:
        p = "2"
    case .three:
        p = "3"
    case let .unknown(u) where Int(u) ?? 0 > 0 : // 枚举关联值,使用 where 增加条件
        p = u
    case .unknown(_):
        p = "negative number"
    }
    print(p)
}

f2(pa: E.one) // 1
f2(pa: E.unknown("10")) // 10
f2(pa: E.unknown("-10")) // negative number

ming1016 avatar Nov 22 '21 06:11 ming1016

let p0 = (0, 1)

//  _ 用来匹配所有可能的值
switch p0 {
case (0, _): 
    print("p0在Y轴上")
default:
    break
}

// 临时赋值
switch p0 {
case (let x, 0):
    print("the x is \(x)")
case (let x, let y):
    print("the x is \(x), the y is \(y)") // ⚠️ 不需要default是因为 (let x, let y)满足所有条件和 default作用一样
}

// 区间匹配
switch 1 {
case 1...2:
    print(""1 is in 1...2")
default:
    break
}

// 多条件
switch 1 {
case 1, 2:
    print("1 is in 1,2 case")
default:
    break
}

Sinter0 avatar Dec 12 '21 04:12 Sinter0