Swift中的循环语句
循环语句能够使程序代码重复执行。Swift编程语言支持4种循环构造类型:while、do while、for和for in。for和while循环是在执行循环体之前测试循环条件,而do while是在执行循环体之后测试循环条件。这就意味着for和while循环可能连一次循环体都未执行,而do while将至少执行一次循环体。for in是for循环的变形,它是专门为集合遍历而设计的。
一、while语句
while语句是一种先判断的循环结构,格式如下:
while 循环条件 {
语句组
}
while循环没有初始化语句,循环次数是不可知的,只要循环条件满足,循环就会一直进行下去。
下面看一个简单的示例,代码如下:
- var i:Int64 = 0
- while i * i < 100000 {
- i++
- }
- println("i = \(i)")
- 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循环没有初始化语句,循环次数是不可知的,不管循环条件是否满足,都会先执行一次循环体,然后再判断循环条件。如果条件满足则执行循环体,不满足则停止循环。
下面看一个示例代码:
- var i:Int64 = 0
- do{
- i++
- } while i * i < 100000
- println("i = \(i)")
- println("i * i = \(i * i)")
输出结果如下:
i = 317
i * i = 100489
该示例与上一节的示例是一样的,都是找到平方数小于100 000的最大整数。输出结果也是一样的。
三、for语句
for语句是应用最广泛、功能最强的一种循环语句。一般格式如下:
for 初始化; 循环条件; 迭代 {
语句组
}
当程序执行到for语句时,会先执行初始化语句,它的作用是初始化循环变量和其他变量,然后程序会查看循环条件是否满足,如果满足,则继续执行循环体并计算迭代语句,之后再判断循环条件,如此反复,直到判断循环条件不满足时跳出循环。终止语句一般用来改变循环条件,它可对循环变量和其他变量进行操作。
以下示例代码是计算1~9的平方表程序:
- println("n n*n")
- println("---------")
- for var i = 1; i < 10; i++ {
- println("\(i) x \(i) = \(i * i)")
- }
输出结果如下:
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 ; ; {
......
}
在初始化部分和迭代部分,可以使用逗号语句来进行多个操作。逗号语句是用逗号分隔的语句序列,如下程序代码所示:
- var x:Int32
- var y:Int32
- for x = 0, y = 10; x < y; x++, y-- {
- println("(x,y) = (\(x),\(y))")
- }
输出结果如下:
(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的标准套路编写代码,只需要提供一个集合就可以遍历。
假设有一个数组,原来遍历数组的方式如下:
- let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- println("----for-------")
- for var i = 0; i < countElements(numbers); i++ {
- println("Count is: \(i)")
- }
输出结果如下:
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循环语句遍历数组的方式如下:
- let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
- println("----for in----")
- for item in numbers {
- println("Count is: \(item)")
- }
输出结果如下:
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循环就不太适合了。
欢迎关注智捷iOS课堂微信公共平台
Swift中的循环语句的更多相关文章
- Swift入门篇-循环语句
今天早上一起来所有新闻都是报道荷兰5-1战胜西班牙,我一看没有搞错吧,顿时想都如果中国队vs荷兰队也不至于会输的怎么惨吧,难道是荷兰队开挂了,于是我看了一下昨天比赛的视频直播,还真是新闻报道的那样,顿 ...
- js中的循环语句
js中的循环语句可分为三种:1.while:2.do……while:3.for. while的语法为 while (exp) { //statements;} var a=1,b=0; whil ...
- shell脚本中select循环语句用法
shell脚本中select循环语句 1. 脚本中select的语法格式 select VAR in LIST do command1 command2 ... ... commandN done s ...
- 详解Python中的循环语句的用法
一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句 ...
- shell编程中的循环语句
while循环直接从文件中读取 while read line do command done < filename until循环 until 条件 do command done for循环 ...
- 洗礼灵魂,修炼python(10)--有趣的判断分支+从实例中掌握循环语句
所有的编程语言里都有判断语句和循环语句. 判断语句则是用来分支程序流程的 循环语句则是为了实现一个效果,让程序的规律性的重复操作 不用说,分支和循环自然在python里也是有的 一,条件判断:if,i ...
- Shell编程-08-Shell中的循环语句
目录 while语句 until语句 for语句 select语句 循环中断控制 循环语句总结 循环语句常用于重复执行一条命令或一组命令等,直到达到结束条件后,则终止执行.在Shell中常见的 ...
- Shell中的循环语句实例
1.for循环语句实例1.1 最基本的for循环 #!/bin/bash for x in one two three four do echo number $x done 注:" ...
- Oracle--存储过程中之循环语句
一般循环语句有两种: 1)使用for循环实现 declare cursor cur is select * from tablename; aw_row tablename%rowtyp ...
随机推荐
- 通过程序 VB.Net 或 C# 读取文本文件行数
1, VB.NET 读取 (通过streamReader) ' tmpCount = 0 'Dim tmpSR As New StreamReader(fileFullName, System.Tex ...
- [PLL][PM]锁相环模拟相位解调
%锁相环测试 %模拟相位解调 clear close all clc fs=1000; %采样率 tend=100; t=0:1/fs:tend; t(end)=[]; fc=1; %载波频偏 fb= ...
- iOS开发——面试总结(一)
面试总结(一) 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题: 1.搞清楚touch事件的传递(事件的响应链) 事件的响应(responder chain) 只有继承了UIRespon ...
- 苹果Swift语言中文教程资源汇总
苹果swift语言中文教程(零)搭配环境以及代码执行成功http://vjiazhi.com/kaifa/1014.html 苹果Swift语言中文教程(一)基础数据类型 http://vjiazhi ...
- mysql升级小结和mysql_upgrade的用途
http://blog.itpub.net/15480802/viewspace-1412259/ mysql升级 1 升级方式 分为In-place和out-of-place,前者直接覆盖当前版本, ...
- UWSGI安装与使用
http://blog.csdn.net/chenggong2dm/article/details/43937433 http://blog.csdn.net/orangleliu/article/d ...
- JavaScript开发之路02(Sencha Touch使用时常见问题及解决办法)
1.Sencha中使用组件后通过layout: 'vbox'指定页面布局为垂直盒布局并且组件的高度采用height: '百分比'指定时,组件的背景色通过style: 'background:#F6F6 ...
- android开发之路08(ListView&Adapter)
ListView控件介绍:用于将数据库中的数据或者网络中的数据通过列表的形式显示出来:ListView采用MVC模式将前端显示和后端数据进行分离. 也就是说,ListView控件在装载数据时并不是直接 ...
- 实现struts2框架
Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages .Servlet.标签库以及面向对象的技术水准.最初的 ...
- SQL Server网络地址备份
SQL Server网络地址备份 Ø 软件系统: SQL Server 各版本 1.问题描述: 在XX客户做SQL Server 到Oracle 数据迁移时,当时由于客户的SQL Server200 ...