75142913在线留言
【基础篇】2、结构控制语句if..else、switch...case、for while循环_IOS开发_网络人

【基础篇】2、结构控制语句if..else、switch...case、for while循环

Kwok 发表于:2021-01-29 13:29:52 点击:51 评论: 0

swift结构控制有自己独特的特点,我们可以充分利用这些特点写出更好理解的代码。

一、switch...case语句:

一般的程序语言都是先学习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...else判断

上面使用到了一个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...in

上一篇里讲到数据区间的时候已演示过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
}

四、while循环与repeat-while循环

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
标签:结构控制swiftKwok最后编辑于:2021-05-26 12:26:32
0
感谢打赏!

《【基础篇】2、结构控制语句if..else、switch...case、for while循环》的网友评论(0)

本站推荐阅读

热门点击文章