循环语句能够使程序代码重复执行。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编程语言中,循环语句是控制程序流程的关键元素,它们允许我们重复执行一段代码,直到满足特定条件。在循环体内部,有时我们需要提前结束整个循环或跳过当前迭代的剩余部分,这时就会用到转移语句 `break` 和...
除了循环本身外,Swift 还提供了一些循环控制语句,以改变循环的执行流程: - **`continue` 语句**:当遇到 `continue` 语句时,当前循环迭代立即结束,并开始下一次循环迭代。 - **`break` 语句**:`break` 语句...
本文将深入探讨Swift中的循环语句和判断语句,这两种语句是流程控制的核心。 首先,让我们来看看Swift的循环语句。Swift提供了两种基本的for循环:for-in和for-condition-increment。for-in循环适用于遍历数组、...
Swift 为开发者提供了丰富的控制流结构,如条件语句(if、guard、switch)和循环语句(for、while),使程序能够根据不同的条件执行不同的代码分支或重复执行同一段代码。Swift 的函数是一等公民,可以像其他数据...
Swift中的基本概念包括变量(var和let)、常量、数据类型(如Int、Double、String、Bool等)、运算符、控制流(如if语句、for循环、switch语句)、函数、结构体、枚举、类、协议、泛型等。这些是编写任何Swift代码的...
在这个“Swift视频教程:Swift基础,可选类型(optional)2-间接拆包”中,我们将深入探讨Swift中的一个关键特性——可选类型及其间接拆包。 可选类型是Swift语言的一个重要特性,它允许变量可能包含值或无值(nil)...
3. **Print References**:在代码中添加打印语句,打印出可能引起循环引用的对象的引用计数。当对象的引用计数不降为0时,可能存在循环引用。 4. **使用Swift的Weak和Unowned**:通过在Block中使用`weak`或`unowned...
- **分号**: Swift 通常不需要在语句末尾使用分号,除非需要在同一行中放置多个语句。 - **整数和浮点数**: Swift 支持多种数值类型,如 `Int`, `Double`, `Float`。 - **类型安全和类型推测**: Swift 在定义变量时...
- **第6章 循环**:介绍Swift中的循环语句,如for-in循环、while循环、repeat-while循环,以及break和continue关键字的使用。 - **第7章 字符串**:讲述Swift中字符串的表示、字符串插值用法以及Unicode标准。 ### ...
Swift采用了自动引用计数(ARC)来管理内存,但在必要时也可以使用`weak`和`unowned`关键字来打破循环引用。 13. **可选链** 可选链允许你安全地调用可选值的属性和方法,即使该值为`nil`,这提高了代码的可读性...
Swift的控制流语句,如if、switch和循环语句,为程序提供了条件和迭代的能力。 Swift支持多种数据集合类型,如数组、字典和集合,它们都具有可变性,可以添加、删除和修改元素。函数和闭包是Swift语言中的重要特性...
- **协议**: Swift 中的协议定义了一组规则,任何遵循该协议的类或结构体必须实现这些规则。 - **扩展**: 扩展可以在不修改原定义的情况下添加新的功能到现有的类、结构体或枚举中。 **7. 泛型** - **泛型**: 泛型...
控制流语句如for循环、while循环和条件语句让程序能够根据不同的条件执行不同的代码路径。 函数和闭包是Swift语言的核心概念之一。Swift中的函数可以有输入参数和返回值,支持尾随闭包的写法。闭包是一种可以捕获和...
”程序,以及逐步引导读者理解变量、常量、运算符、条件语句、循环等基本编程概念。此外,教程可能还会涉及Swift的内存管理,如自动引用计数(Automatic Reference Counting, ARC)以及如何使用Swift进行UI设计和...
2. **基本控制流** (`03-basic-control-flow`): Swift中的控制流程语句包括条件语句(如if-else)、循环(如for-in和while)以及switch语句,这些都是编写复杂逻辑的关键部分。 3. **字符串处理** (`09-strings`): ...
Swift支持多种循环语句,包括for-in循环(用于遍历序列)、while循环(基于条件重复执行代码)和do-while循环(至少执行一次,然后基于条件决定是否继续)。 8. **代理(Delegates)** 代理模式是Swift中一种常见的...
Swift的控制流程包括条件语句(if和switch)和循环结构(for-in、for、while和repeat-while)。与C或Objective-C不同,Swift不再要求在条件或循环的条件变量周围使用圆括号,但仍需使用花括号包裹代码块。这使得代码...
`fallthrough`是Swift的一个独特特性,它用于枚举(switch)语句中,使得程序在匹配一个case后不立即退出,而是继续向下执行下一个case。在许多其他编程语言中,如C或Java,一旦case匹配成功,程序会跳出switch结构...
同时,for-in循环、while循环和switch语句等基本控制结构也具备了更丰富的特性和限制,比如switch语句支持模式匹配,提高了代码的可读性。 Swift的错误处理机制通过throws关键字和do-catch块来捕获和处理异常,提供...