Swift学习23:更加强大的switch

张建 lol

swift

  • switch 语句会将一个值与多个可能匹配的模式匹配,然后基于第一个成功匹配的模式来执行合适的代码块

  • switch 语句一定得是全面的。给定类型里的每一个值都得匹配到一个 switchcase。你可以定义一个默认匹配的 case 来匹配所有未明确的值,用关键字 default 标记

  • OCswitch 语句不全面,仍然可以运行

1
2
3
4
5
6
7
let c:Character = "z"
switch c {
case "a":
print("the first letter is alphabet")
case "z":
print("the last letter is alphabet")
}

修改

1
2
3
4
5
6
7
8
9
let c:Character = "z"
switch c {
case "a":
print("the first letter is alphabet")
case "z":
print("the last letter is alphabet")
default:
print("other")
}

没有隐私贯穿

  • 相比 OCCSwift 里的 Switch 不会默认从匹配的 case 末尾 贯穿到下一个 case

  • 相反,整个 Switch 在匹配到第一个 case 执行完毕之后退出,不再需要显示 break

  • 每一个 case 的函数体必须包含至少一个可执行的语句

  • 在一个 Switchcase 中匹配多个值可以用 逗号分割,并且可以写成多行

1
2
3
4
5
6
7
8
9
let c = "a"
switch c {
case "a","e","i":
print("元音字母")
case "b","c":
print("符印字母")
default:
print("其他字符")
}

区间匹配

  • Switchcase 的值可以再一个区间中匹配
1
2
3
4
5
6
7
8
9
10
11
12
let count = 43
switch count{
case 0:
print("none")
case 1...25:
print("1~25")
case 26..<51:
print("26~50")
default:
print("other")
}

元组匹配

  • 你可以使用元组来在一个 switch 中测试有多个值

  • 使用下划线 _ 来表明匹配所有可能的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let point = (1,1)
switch point{
case (0,0):
print("point at origin")
case (_,0):
print("point at x")
case (0,_):
print("point at y")
case (-2...2,-2...2):
print("point at box")
default:
print(0,0)
}

值绑定

  • switchcase 可以将匹配到的值临时 绑定 到一个 常量或变量,来给 case 的函数体使用

  • 如果使用 var 关键字,临时的变量就会以合适的值来创建并初始化。对这个变量的任何改变都只会在 case 的函数体内有效

1
2
3
4
5
6
7
8
9
let point = (1,0)
switch point{
case (let x,0):
print("x is \(x) when y is 0")
case (0,let y):
print("y is \(y) when x is 0")
default:
print("other")
}

where 语句

  • switch case 可以使用 where 语句来检查是否符合特定的约束
1
2
3
4
5
6
7
8
9
let point = (1,-1)
switch point{
case (let x,let y) where x == y:
print("x == y")
case (let x,let y) where x == -y:
print("x == -y")
default:
print("other")
}

复合匹配

  • case 后可以写多个模式来复合,在每个模式间用 , 号分割

复合匹配 - 值绑定

  • 复合匹配同样可以包含 值绑定
  • Post title:Swift学习23:更加强大的switch
  • Post author:张建
  • Create time:2023-02-23 21:35:07
  • Post link:https://redefine.ohevan.com/2023/02/23/Swift课程/Swift学习23:更加强大的switch/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.