文档章节

Swift中的循环语句

智捷课堂
 智捷课堂
发布于 2014/09/09 14:12
字数 1779
阅读 69
收藏 1

循环语句能够使程序代码重复执行。Swift编程语言支持4种循环构造类型:while、do while、for和for in。for和while循环是在执行循环体之前测试循环条件,而do while是在执行循环体之后测试循环条件。这就意味着for和while循环可能连一次循环体都未执行,而do while将至少执行一次循环体。for in是for循环的变形,它是专门为集合遍历而设计的。
一、while语句
while语句是一种先判断的循环结构,格式如下:
while 循环条件 {
    语句组 
}
while循环没有初始化语句,循环次数是不可知的,只要循环条件满足,循环就会一直进行下去。
下面看一个简单的示例,代码如下:

[html] view plaincopy

 

  1. var i:Int64 = 0  

  2.   

  3.   

  4. while i * i < 100000 {  

  5.     i++  

  6. }  

  7.   

  8.   

  9. println("i = \(i)")  

  10. println("i * i = \(i * i)")  



输出结果如下:
i = 317
i * i = 100489
上述程序代码的目的是找到平方数小于100 000的最大整数。使用while循环需要注意几点,while循环条件语句中只能写一个表达式,而且是一个布尔型表达式,那么如果循环体中需要循环变量,就必须在while语句之前对循环变量进行初始化。示例中先给i赋值为0,然后在循环体内部必须通过语句更改循环变量的值,否则将会发生死循环。
提示死循环对于单线程程序而言是一场灾难,但是在多线程程序中,死循环是必需的,死循环会出现在子线程中。例如游戏设计中对玩家输入装置的轮询,或是动画程序的播放,都是需要死循环的。下面的代码是死循环的一般写法。
while true { 
    语句组  
}


提示循环是比较耗费资源的操作,如何让开发人员测试和评估循环效率呢?Xcode 6提供的Playground工具可以帮助我们实现这个目的。在Playground界面中打开时间轴。打开Playground界面后运行代码,如下图所示,程序运行过程中会在右边时间轴绘制出一条线段,横轴是经历的时间,纵轴是i值变化,我们在执行完成后拖曳线段,查看运行历史中i值内容。就本例而言,时间轴中的线段越陡,执行的效率越高。



二、do while语句
do while语句的使用与while语句相似,不过do while语句是事后判断循环条件结构,语句格式如下: 
do {
  语句组 
} while 循环条件
do while循环没有初始化语句,循环次数是不可知的,不管循环条件是否满足,都会先执行一次循环体,然后再判断循环条件。如果条件满足则执行循环体,不满足则停止循环。
下面看一个示例代码:

[html] view plaincopy

 

  1. var i:Int64 = 0  

  2.   

  3.   

  4. do{  

  5.     i++  

  6. } while  i * i < 100000  

  7.   

  8.   

  9. println("i = \(i)")  

  10. println("i * i = \(i * i)")  



输出结果如下:
i = 317
i * i = 100489
该示例与上一节的示例是一样的,都是找到平方数小于100 000的最大整数。输出结果也是一样的。
三、for语句
for语句是应用最广泛、功能最强的一种循环语句。一般格式如下: 
for 初始化; 循环条件; 迭代 {
  语句组
}
当程序执行到for语句时,会先执行初始化语句,它的作用是初始化循环变量和其他变量,然后程序会查看循环条件是否满足,如果满足,则继续执行循环体并计算迭代语句,之后再判断循环条件,如此反复,直到判断循环条件不满足时跳出循环。终止语句一般用来改变循环条件,它可对循环变量和其他变量进行操作。 
以下示例代码是计算1~9的平方表程序: 

[html] view plaincopy

 

  1. println("n   n*n")  

  2. println("---------")  

  3. for var i = 1; i < 10; i++  {  

  4.     println("\(i) x \(i) = \(i * i)")  

  5. }  



输出结果如下:
n   n*n
---------
1 x 1 = 1
2 x 2 = 4
3 x 3 = 9
4 x 4 = 16
5 x 5 = 25
6 x 6 = 36
7 x 7 = 49
8 x 8 = 64
9 x 9 = 81
在这个程序的循环部分初始时,给循环变量i赋值为1,每次循环都要判断i的值是否小于10,如果为true,则执行循环体,然后给i加1。因此,最后的结果是打印出1~9的平方,不包括9。 
初始化、循环条件以及迭代部分都可以为空语句(但分号不能省略),三者均为空的时候,相当于一个无限循环。
for ; ;  {
    ......
}
在初始化部分和迭代部分,可以使用逗号语句来进行多个操作。逗号语句是用逗号分隔的语句序列,如下程序代码所示:

[html] view plaincopy

 

  1. var x:Int32  

  2. var y:Int32  

  3.   

  4.   

  5. for x = 0y = 10; x < y; x++, y--  {  

  6.     println("(x,y) = (\(x),\(y))")  

  7. }  



输出结果如下:
(x,y) = (0,10)
(x,y) = (1,9)
(x,y) = (2,8)
(x,y) = (3,7)
(x,y) = (4,6)
四、for in语句
Swift提供了一种专门用于遍历集合的for循环——for in循环。使用for in循环不必按照for的标准套路编写代码,只需要提供一个集合就可以遍历。
假设有一个数组,原来遍历数组的方式如下:

[html] view plaincopy

 

  1. let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  

  2.   

  3.   

  4. println("----for-------")  

  5. for var i = 0; i < countElements(numbers); i++ {  

  6.     println("Count is: \(i)")  

  7. }  



输出结果如下:
Count is: 0
Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
上述语句let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]声明并初始化了10个元素数组集合,目前大家只需要知道当初始化数组时,要把相同类型的元素放到[…]中并且用逗号分隔(,)即可,关于数组集合我们会在第10章详细介绍。
采用for in循环语句遍历数组的方式如下:

[html] view plaincopy

 

  1. let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];  

  2.   

  3.   

  4. println("----for in----")  

  5. for item in numbers {  

  6.     println("Count is: \(item)")  

  7. }  



输出结果如下:
Count is: 0
Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9

从上例可以发现,item是循环变量,item之前使用var声明,它是隐式变量声明的。in后面是集合实例,for in循环语句会将后面集合中的元素一一取出来,保存到item中。可见for in语句在遍历集合的时候要简单方便得多。但是对于其他操作,for in循环就不太适合了。

 

 

更多内容请关注国内第一本Swift图书《Swift开发指南》

本书交流讨论网站:http://www.51work6.com/swift.php

欢迎加入Swift技术讨论群:362298485

 

 

 

 

欢迎关注智捷iOS课堂微信公共平台


© 著作权归作者所有

下一篇: Swift字典类
智捷课堂

智捷课堂

粉丝 40
博文 239
码字总数 215495
作品 0
东城
私信 提问
Swift讲解专题六——流程控制

Swift讲解专题六——流程控制 一、引言 一种编程语言的强大与否,很大程度上取决于其提供的程序流程控制方案,就如使用汇编语言实现复杂的程序流程是一件痛苦的事情。Swift中提供了许多强大的...

珲少
2016/05/12
388
0
Swift - 条件语句、循环语句

一、条件语句 条件语句通过设定的一个或多个条件来执行程序,在条件为真时执行指定的语句,在条件为 false 时执行另外指定的语句。 可以通过下图来简单了解条件语句的执行过程: Swift提供了以...

Albert_Li99
2017/11/16
0
0
Swift编程高级教程

常量与变量 常量和变量是某个特定类型的值的名字,如果在程序运行时值不能被修改的是一个常量,反之是一个变量。 常量和变量的声明 Swift中的常量和变量在使用前必须先声明。其中let关键字声...

xiahuawuyu
2016/01/11
177
0
swift 流程控制

swift 流程控制 // // main.swift // swift流程控制 // // Created by zhangbiao on 14-6-13. // Copyright (c) 2014年 理想. All rights reserved. // import Foundation // swift 流程控制......

法斗斗
2016/03/03
6
0
Swift笔记逻辑分支及循环体

1.if OC 后面条件必须加() 后面提条件非0即真 如果只有一条if后面的大括号可省略 Swift if 后面不加括号 if 后面条件必须是明确的Bool类型 即使只有一条指令if后面的大括号亦不可省略 if els...

大基本功
2017/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部