首页 理论教育 使用for...in循环遍历对象属性

使用for...in循环遍历对象属性

时间:2023-06-23 理论教育 版权反馈
【摘要】:in循环的语法很简单,示例如下:动手写4.3.1 ForInLoops控制台输出如下:控制台输出如下:首先声明一个类型为Int的变量loopTimes,并初始化为0;接着创建一个for…for关键字意味着这是个循环,接着声明了一个迭代器i,用来表示循环的当前重复次数。举个例子,如果点击中间的点,Playground会告诉你这个点的值是2,如图4.3.2所示:图4.3.2loopTimes第二次循环的值因为i被声明为for…

使用for...in循环遍历对象属性

for…in循环的语法很简单,示例如下:

动手写4.3.1 ForInLoops

控制台输出如下:

首先声明一个类型为Int的变量loopTimes,并初始化为0;接着创建一个for…in循环;最后剖析

一下该循环的组成部分。for关键字意味着这是个循环,接着声明了一个迭代器i,用来表示循环的当前重复次数。迭代

器是只在循环体内存在的常量,编译器会帮助程序管理这个常量。在第一次循环中,其值是循环区间的第一个值。因为代码中用“...”来创建1~3的闭区间,所以i的第一个值就是1;在第二次循环中,i就是2,以此类推。因此,读者可以认为i在每次循环的开始都被一个新常量替换,其值为区间内下一个值。

括号里的代码会在每次循环时执行,每循环一次,loopTimes就会增加1。增加loopTimes后,下一行又打印了这个变量的值,这是为了在运行结果侧边栏中显示其值后再将其值打印到控制台。增加和打印这两步会持续下去,直到i达到区间的结尾为3。

要看到循环结果,可在loopTimes这行代码的运行结果侧边栏最右边找到并点击结果按钮,loopTimes的历史值就会如图4.3.1显示出来:

图4.3.1 loopTimes历史值

这个操作也会打开结果视图,它在Playground的代码中内嵌展示实例的历史值。通过点击并拖拽图像窗口的边缘可以将其扩大或缩小。把鼠标指针移到新窗口内,我们会看到可以选择图像上的单个点。举个例子,如果点击中间的点,Playground会告诉你这个点的值是2,如图4.3.2所示:

图4.3.2 loopTimes第二次循环的值

因为i被声明为for…in循环的迭代器,所以能在循环的每次迭代过程中读取i。修改一下输出的代码来显示每次迭代过程中i的值,示例如下:

动手写4.3.2 ForInLoopsI

控制台输出如下:

(www.xing528.com)

通过使用“_”可以忽略迭代器,这样可以不用显式地使用它。将命名常量替换为这一通配符,再把print()语句改回之前的实现。例如:

动手写4.3.3 ForInLoopsWithoutI

控制台输出如下:

for…in循环的实现,确保了某个特定的操作可以发生一定次数,它不会每循环一次就检查并报告迭代器的值。如果需要在循环体内引用迭代器的话,通常会用显式的迭代器i。

Swift的for…in循环支持where子句,类似于4.2.5小节那样:利用where子句可以更好地控制循环代码何时执行,也可以为执行循环代码所要满足的条件提供逻辑测试。如果where子句建立的条件没有得到满足,循环代码就不会运行。

想象现在要写一个在区间上重复的循环,但是只有迭代器遇到奇数时才执行代码,这里就可以用到where子句,示例代码如下:

动手写4.3.4 ForInLoopsWhere

控制台输出如下:

跟之前一样,创建局部常量loopTimes,然后就可以用在where子句的条件中。1~10区间内的每个数都被绑定到loopTimes上。接着,where子句检查i能否被2除余1,如果余数为1,循环会执行代码;结果是循环则会打印1~10中所有的奇数。

读者可以思考一下,如果没有where子句,要得到同样的结果该怎么做?

动手写4.3.5 ForInLoopsWithoutWhere

控制台输出如下:

以上代码中做了与带有where子句循环同样的事情,但是看起来没有之前那么优雅。这里的代码行数更多,循环体内还嵌套着条件语句。一般来说,只要不是过于复杂和无法阅读,本书都推荐使用行数更少的代码。Swift的where子句可读性很好,所以通常可以选择这个更简洁的方案。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈