SwiftPamphletApp
SwiftPamphletApp copied to clipboard
Switch
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
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
}