swift的结构控制有自己独特的特点,我们可以充分利用这些特点写出更好理解的代码。
一般的程序语言都是先学习if..else语句,由于有一定的基础,而且swift里的if会借用switch的一些特性,所以我们直接学习switch...case语句。
swift的switch语句除了常规的用法以外还有自己的独特性。下面我们通过代码很做个入门:
var staCode = 200 //定义一个状态码为200
var message = "请求结果:"
switch staCode{
case 403:
message += "禁止访问!"
case 404:
message += "找不到页面!"
case 500:
message += "服务器内部错误!"
case 200:
message += "访问结果成功!"
default:
message += "未知错误!"
}
print(message)//请求结果:访问结果成功!
可以像GO语言一样匹配多个条件,把上面的代码合并处理:
var staCode = 404 //定义一个状态码
var message = "请求结果:"
switch staCode{
case 403,404,500:
message += "发现一个服务器返回错误:代码" + String(staCode)
case 200:
message += "访问结果成功!"
default:
message += "未知错误!"
}
print(message)//请求结果:发现一个服务器返回错误:代码404
swift也支持switch穿透--fallthrough,如果在case的代码块里放入fallthrough后会继续执行下一个case,实现switch穿透,做为一个知识点了解,在实际开发上运用比较少~参考GO语言:http://www.55mx.com/go/76.html
上面是常规编程语言里的用法,下面开始说说swift语言里的自己特有的使用:
1、区间:
在上一篇里有一个数据类型就是讲到的区间,我们可以使用1...5表示1、2、3、4和5。例子只使用了for i in 1...5,当然区间可以在switch上使用。
var staCode = 455 //定义一个状态码
var message = "请求结果:"
switch staCode{
case 400...500:
message += "发现一个服务器返回错误!" + String(staCode)
case 200...299:
message += "访问结果成功!"
default:
message += "未知错误!"
}
print(message)//请求结果:发现一个服务器返回错误!455
2、if case语句匹配区间:
swift语言的if语句可以借用case的区间条件判断:
var staCode = 411 //定义一个状态码
var message = "请求结果:"
if case 400...500 = staCode{
message += "发现一个服务器返回错误!" + String(staCode)
}
print(message)//请求结果:发现一个服务器返回错误!411
多个条件用逗号(,)隔开:
if case 400...500 = staCode,staCode <= 600{
message += "发现一个服务器返回错误!" + String(staCode)
}
//这里的逗号(,)相当于&&
3、值绑定:
var staCode = 0 //定义一个状态码
var message = "请求结果:"
switch staCode{
case 400...500:
message += "发现一个服务器返回错误!" + String(staCode)
case 200...299:
message += "访问结果成功!"
case let unkownCode:
message = "发现一个未知代码:"+String(unkownCode)
}
print(message)//发现一个未知代码:0
当没有匹配到一个分支的时候,我们创建了一个unkownCode常量来接收绑定staCode的值,因为有default了值绑定目前还没有找到应用的地方,这里做为一个知识点了解一下。
4、where子句:
利用上面值绑定可以做一些额外的条件判断工作。
var staCode = 409 //定义一个状态码
var message = "请求结果:"
switch staCode{
case let s where (s>=400)&&(s<600):
message += "发现一个服务器返回错误!" + String(staCode)
case 200...299:
message += "访问结果成功!"
default:
break
}
print(message)//请求结果:发现一个服务器返回错误!409
where 可以额外的增加一个条件来限制区域。只有满足了这些条件才会去匹配下面执行的语句。这可以在switch中创建一些动态的筛选条件。
5、元组和模式匹配:
关于元组的创建与访问,将会在下一篇内容里介绍,这里只使用:
var message = "请求结果:"
var codeInfo = (200,301)
switch codeInfo{
case (200,300):
message += "成功匹配到200,300"
case (200,_):
message += "只匹配了第一个数!"
default:
break
}
print(message)//请求结果:只匹配了第一个数!
下划线(_)这里可以理解为go语言里的忽略或者是通配符,可以匹配任意值。
上面使用到了一个if...case,这里再简单的通过代码演示一下if语句:
var userAge = 58 //用户年龄18
var message: String?
if userAge >= 18{
if userAge < 22{
message = "还未到法定结婚年龄,但可以开始恋爱了~"
}else if userAge >= 22 && userAge < 50{
message = "你可以结婚了~"
}else if case 50...80 = userAge{
message = "你年经的时候都在干啥呢?~"
}else{
message = "你这个晚婚也太晚了点吧!"
}
print(message!)
}
上面通过1个示例代码演示了我们开发中的大部分使用场景,如果我们的场景比较简单可以使用三元运算符:
var userAge = 18 //用户年龄18
var message = userAge >= 22 ? "你可以结婚了~" : "你还小,还可以玩得起!"
print(message)//你还小,还可以玩得起!
除了上面的if...else条件判断,swift还提供了一个叫着:guard的条件判断语句。
guard false else {
print("不符合条件判断时,执行本代码")
}
通常情况下guard用于可选类型的拆包操作:
guard let url = URL(string: www.meishiq.com") else {
print("网址格式不正确")
return
}
//将上面的代码使用if...else重写为:
guard let url = URL(string: www.meishiq.com"){
//todo?
} else {
print("网址格式不正确")
return
}
上一篇里讲到数据区间的时候已演示过for循环。下面的代码里我们将演示一些特殊的用法:
1、利用characters 属性遍历字符串
for c in "55mx.com 网络人" {
print(c)
}
/*
n
e
t
e
r
8
.
c
o
m
网
络
人
*/
2、遍历一个数组
var Ints:[Int] = [10, 20, 30]
for v in Ints {
print( "v 的值为 (v)")
}
3、忽略迭代值
for _ in 1...100 {
print(".") //将打印100行.
}
4、where子句
没有想到吧,swift里的for...in也是支持 where子语句的:
for i in 1...10 where i % 3 == 0 {
print("(i).")
}
/*
3.
6.
9.
*/
把上面的代码可以理解为:
for i in 1...10 {
if i % 3 == 0{
print("(i).")
}
}
可以按自己的使用习惯来,不过我认为where子句代码量更少。更方便阅读。
5、好用的stride函数
我们可以使用stride排除取余的数。根据参数名字的不同,可以保留结尾。
//第二个参数through表示保留最后的9
for i in stride(from: -5,through:9,by:3){
print(i)//打印:-3,0,3,6,9
}
//第二个参数to表示不保留最后的9
for i in stride(from: -4,through:9,by:3).reversed(){
print(i)//打印:8,5,2,-1,4
}
//.reversed()的用处是将结果反向输出
for i in 0...5.reversed(){
print(i)//打印:5,4,3,2,1,0
}
1、while只要条件为真,while循环会一直执行下去。
var i = 1
while i < 10{
print(i)
i += 1//swift里没有i++
}
//将打印1...9
while最适合重复次数未知的情况,如果使用不当容易产生死循环。
2、repeat-while 这个在其它语言里被叫着do-while。。。至于为毛苹果要改成这样。可以就像取消附送充电器和耳机一样任性吧。。。。
repeat-while主要用于不管条件成不成立都必须来一发。
var i = 10
repeat{
print(i)//打印10
i += i
}while i < 9
//不知道为什么看起来怪怪的
3、continue 告诉一个循环体跳过本次循环并立即开始下次循环迭代。break 中断当前循环。
除非注明,网络人的文章均为原创,转载请以链接形式标明本文地址:https://www.55mx.com/post/100
《【基础篇】2、结构控制语句if..else、switch...case、for while循环》的网友评论(0)