服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Swift - 举例讲解Swift编程中switch...case语句的用法

举例讲解Swift编程中switch...case语句的用法

2020-12-25 15:56wizardforcel Swift

这篇文章主要介绍了Swift编程中switch...case语句的用法,其中fallthrough关键字在switch语句中的使用是重点,需要的朋友可以参考下

Switch作为选择结构中必不可少的语句也被加入到了Swift中,只要有过编程经验的人对Switch语句都不会感到陌生,但苹果对Switch进行了大大的增强,使其拥有其他语言中没有的特性。使用Switch语句很简单:

?
1
2
3
4
5
6
7
8
9
var i = 0
switch i {
 case 0:
  "0" //被输出
 case 1:
  "1"
 default:
  "2"
}

在这个最简单的Switch语句中,与其他语言很不同的一点是:不用显式的加上break。Swift的Switch语句会自动在case结尾处加上break,执行完满足条件的case部分后,就自动退出了。但是在某些情况下,我们可能会希望Switch能同时执行两条case,那么可以这样:

?
1
2
3
4
5
6
7
8
9
var i = 3
switch i {
 case 0,3:
  "0" //被输出
 case 1:
  "1"
 default:
  "2"
}

在case后的多个条件中,用逗号隔开即可。
如果就是想执行完一条case之后,想继续执行下一条case,就要用到一个新的关键字:

?
1
2
3
4
5
6
7
8
9
10
11
12
var i = 0
switch i {
 case 0:
  "0" //被输出
  fallthrough
 case 1:
  "1" //被输出
 case 2:
  "2"
 default:
  "default"
}

使用新的关键字fallthrough能使Switch在执行完一个case之后,紧接着执行下一条case。
Swift的Switch语句一定要涵盖所有的情况,这并不是说一定要有default,只要上面的case能满足所有的情况,就可以不用写default。


下面我们来看一些小例子帮助理解:

例1:

?
1
2
3
4
5
6
7
8
9
10
let someOne = ("25","liyuanbo")
 
switch someOne
 {
case (_,let name) where name.hasPrefix("li"):
 println("First name has li")
 
default:
 println("First has not li")
}

这里 (_,let name) where name.hasPrefix("li") 就是在someOne2落入(_,let name)中的name有没有前缀字符串有没有li。当然someOne2是满足这个条件的。


例2:
下面我们来看看fallthrough的用法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch coordinate1
 {
case (0,0):
 println("原点")
 fallthrough
case (_,0):
 println("x轴")
 fallthrough
case(0,_):
 println("y轴")
case(-2...2,-2...2):
 println("矩形区域")
default:
 println("没有任何目标区域")
 
}

这样我们可以看到打印输出了:原点,x轴,y轴,如果继续加,就会打印多出一个矩形区域。

最后我们要强调一点,swift中的switch一定的包含变量的所有情况,这里我们如果coordinate4是(10,10)然后把default注释点,就会报错,因为上面4个条件是不能满足(10,10)这个点的。


那是不是说必须得有default,当然不是的,这要对变量的所有情况都包含,可以没有default。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let coordinate2 = (2,0)
 
switch coordinate2
 {
case (0,0):
 println("原点")
case (let x,0):
 println("x轴")
case(0,let y):
 println("y轴")
 
case(let x,let y):
 println("所有区域")
 
}

这里就可以没有default,因为这里case(let x,let y)都包含了2维坐标的所有点。

延伸 · 阅读

精彩推荐