学习Swift和iOS开发第6部分:循环
循环是重复的代码块,我们可以用来对Swift中的多个数据执行一项操作。
DRY原则指出“不要自己重复”。这是一种已存在很长时间的编码原则,但是Swift中的循环是重复代码的块。
如何使用循环是一种好习惯? 虽然循环反复重复相同的代码,但这样做是在单个循环的范围内进行的。 例如,我们可以从数组中传入数据,并且可以对该集合的每个项目执行相同的操作。
这是Swift语言非常有用的组件。 在这篇文章中,我们将学习3种流行的Swift循环类型。 让我们变得循环! 🙃
搭建游乐场
首先,如果尚未打开Xcode,请点击Create New Playground
。 给它起一个类似Loops的名称,然后单击Next
。
选择某个位置以保存此.playground文件,然后单击“ Create
以保存它。 您应该看到类似以下的屏幕:
删除左侧的所有样板代码,但根据需要保留import UIKit
。
为什么要使用循环
假设我们有4名员工在公司工作。 每个员工的薪水不同:
- 员工1:$ 45,000
- 员工2:$ 100,000
- 员工3:$ 54,000
- 员工4:$ 20,000(对不起,兄弟)。
创建4个变量(每个雇员一个),并将每个变量的值设置为上面的相关薪水:
导入UIKitvar employee1Salary = 45000.0
var employee2Salary = 100000.0
var employee3Salary = 54000.0
var employee4Salary = 20000.0
我们刚刚完成了2016年第四季度,我们度过了非常成功的一年。 我们希望给每个员工加薪10%。 在您的游乐场中,键入:
导入UIKitvar employee1Salary = 45000.0
var employee2Salary = 100000.0
var employee3Salary = 54000.0
var employee4Salary = 20000.0employee1Salary = employee1Salary +(employee1Salary * 0.10)
上面的代码执行操作45000.0 + (45000.0 * 0.10)
因为它采用我们的变量值并将其加到自身的10%上。
在Playground的右侧,您应该看到一个新值-49500。
让我们为每位员工执行此操作:
employee1Salary = employee1Salary +(employee1Salary * 0.10)//打印49500
employee2Salary = employee2Salary +(employee2Salary * 0.10)//打印110000
employee3Salary = employee3Salary +(employee1Salary * 0.10)//打印59400
employee4Salary = employee4Salary +(employee1Salary * 0.10)//打印22000
我不了解您,但我闻到一些臭代码。 如果您在想,“等等。 我们正在重复自己……如果我们有100名员工该怎么办?”为100名员工执行此操作将非常耗费精力,并且可能会导致错误。
我们还违反了DRY原则(请勿重复自己)。
我们不需要有4个单独的变量来存储员工薪水。 让我们将它们合并为一个名为salaries
数组:
var salaries = [45000.0,100000.0,54000.0,20000.0]
我们如何循环利用这些,并为每个人的工资增加10%? 好吧,我们可以输入:
薪金[0] =薪金[0] +(薪金[0] * 0.10)
但这将导致相同的问题。 我们仍然需要为每位员工编写一行代码,然后重复自己的工作。 ! 删除该行代码,仅保留名为salaries
的数组。
我们如何解决这个问题? 这就是Swift中的循环变得非常有用的地方。 对于每位员工,我们给他们提供薪水,并且需要对每位员工执行相同的操作- salary + (salary * 10%)
。 让我们编写一个循环来处理这个问题。
写你的第一个循环
我们将编写的第一个循环称为repeat-while
循环。 循环有几种不同的类型,但是它们都在满足或满足特定条件时重复运行代码。
编写重复循环
在我们的薪水变量下,键入:
var salaries = [45000.0,100000.0,54000.0,20000.0] var x = 0
重复{
x + = 1
},而(x <salaries.count)
您应该看到在Playground窗口的右侧,我们的循环运行了4次。 但为什么?
我们要求循环重复获取变量x
的值并将其加1。
然后,我们的循环将根据声明的条件进行检查: x < salaries.count
。
我们要求它查看x
的值是什么,然后查看它是否小于数组salaries
的项目总数。
数组后的.count
将为您提供该数组中有多少项的值。 如果我们看,这里有4个薪水,因此salaries.count
= 4。
因此,在幕后,我们正在执行以下操作:
var salaries = [45000.0,100000.0,54000.0,20000.0] var x = 0
x + 1 //现在x = 1
//检查条件:1 <4为true,继续循环x + 1 //现在x = 2
//检查条件:2 <4为真,继续循环x + 1 //现在x = 3
//检查条件:3 <4为真,继续循环x + 1 //现在x = 4
//检查条件:4 <4为假,停止循环
加上10%的工资等式
现在我们需要做的就是添加薪水方程式,但是我们不会使用数字值来调用数组的特定元素(即salaries[0]
),而是使用变量x
(即salaries[x]
),因为它是值在循环中从0迭代到3。 请记住,在Swift的数组中使用零索引,这意味着第一个元素编号为0。
将以下内容添加到重复循环中:
var salaries = [45000.0,100000.0,54000.0,20000.0] var x = 0
重复{
薪金[x] =薪金[x] +(薪金[x] * 0.10)
x + = 1
} while(x <salaries.count)//或者一种较短的写itrepeat的方法{
薪金[x] * = 1.1
x + = 1
},而(x <salaries.count)
变量x
可以命名为任何东西,但是“ x”只是循环中常用的选择。 index
是一个更罗word但又更具描述性的变量。 请记住,在数组中,索引是用于标识数组中每个元素的数字。
为了更具描述性,请将变量x
更改为index
。 像这样:
var salaries = [45000.0,100000.0,54000.0,20000.0] var index = 0
重复{
薪金[指数] =薪金[指数] +(薪金[指数] * 0.10)
指数+ = 1
}而(索引<salaries.count)
那这是做什么的? 我们首先将index
变量设置为0。
然后,我们声明一个repeat-while循环。 在重复块内,我们添加了一个方程式,该方程式将我们的薪水加到该项目当前薪水的10%,该指数与变量index
相同(此时等于0)。
然后,将1加到index
变量中,使其等于1。
最后,我们使用while
条件检查索引是否仍然小于salaries
数组中元素的总数。
似乎我在重复自己,但了解这一点非常重要。
编写 for-in
循环
另一种循环类型称为for-in
循环。 它使您可以遍历一系列值并为每个值执行一个操作。
这是一个for-in
循环的示例:
对于x in 1…5 {
打印(“索引:\(x)”)
}
如果将上面的代码键入到Playground中,您将看到结果“(5次)”,这意味着我们已循环5次。 在操场窗口底部的控制台中,您应该看到以下消息:
索引:1
索引:2
索引:3
索引:4
索引:5
将x
的值设置为1,然后我们打印消息Index: 1
因为x
等于1。
然后循环重新启动,但是这次x
被设置为范围内的下一个值:2。
控制台将打印Index: 2
,然后重复循环。 这一直持续到我们达到5的值为止。
…的使用表示“包含”,表示我们应包括从1到5的每个值。
如果我们要使其成为“独占”循环,以便我们的循环考虑范围中最后一个值以外的所有内容,则需要添加一个新的“独占”循环,如下所示:
对于x in 1…5 {
打印(“索引:\(x)”)
}对于1中的x。<5 {
打印(“专有索引:\(x)”)
}
您应该只看到第二行打印出4行。 这是因为我们要求它排除使用的最终值5。
for-in
循环的开始由关键字for
指示。 然后,我们创建一个名为x
的变量,但可以将其命名为任何东西。
接下来,我们使用关键字in
表示要声明一个值范围。
最后,我们说明循环应在哪些值内操作。
要继续上面的薪水示例,请在“操场”窗口中键入以下for-in
循环:
对于i in 0 .. <salaries.count {
薪金[i] =薪金[i] +(薪金[i] * 0.10)
打印(薪水[i])
}
此循环创建一个名为i
的变量,并声明范围为0到“小于” salaries.count
的值。 由于salaries.count
等于4,我们的循环是互斥的,并且由于4不小于4,因此只能检查0到3之间的值。
但是,这是完美的,因为我们的薪金数组的索引从零开始,到3。
上面的循环的流程是这样的:变量i
设置为0 —我们范围内的第一个值。
然后i
作为salaries
数组的索引传入。
之后,我们进行数学运算以像以前一样增加10%的加薪。
最后,我们将提高的工资打印到下面的控制台。
这是for-in循环和repeat-while循环之间的主要区别:
在for-in循环中,占位符变量的值(在本例中为i
)由我们最后设置的值范围修改。
在重复循环中,我们需要通过写入index += 1
来增加变量index
。
创建一个 for-each
循环
下一个循环是针对您可能有可变数量的项目循环进行的。 我们使用了预定义范围或其中包含静态信息的数组。
如果所有薪水信息都存储在服务器上,并且随着新员工和解雇情况的变化,该怎么办? 如果我们要以静态数组手动输入每个人的薪水信息,则更改或修改任何人的薪水将变得更加困难。 如果要解雇某个雇员的工资,这将是一个麻烦的任务。
要编写一个for-each
循环,请键入以下内容:
薪水{
打印(“薪水:\(salary)”)
}
正如您在“操场”窗口底部的控制台中看到的那样,我们数组中的每个薪水都打印得很好。
上面的代码以关键字for
开头,以指示我们正在创建循环。
然后,我们创建一个名为salary
的变量,并要求它循环遍历salaries
数组中的每个项目,直到到达结尾为止。
对于数组中的每个项目循环,我们将其值打印到一个String中,如下所示:“ Salary:24200.0”
就个人而言,我发现for-each
循环是初学者最容易理解的,因为您可以将变量命名为与数组内容相关的特定名称。
包起来
循环是在学习编码时应了解的基本概念。 如果您对它们的工作方式感到困惑,建议您重新阅读这篇文章。 尝试几次键入示例。
在线进行研究也是一个好主意。 查找人们正在使用循环的示例和现实场景,并从中学习。
我们已经了解了Swift中的repeat-while
, for-in
和for-each
循环。 现在,您可以遍历数据集合并编写更好,更高效的代码。 每当您需要一遍又一遍地执行相同的操作时,不要编写多行几乎重复的代码,而要使用循环! 在下一课中,我们将学习Swift词典。
行使
创建一个数组,存储甲壳虫乐队所有四个成员的姓名。 编写一个“ for-each”循环,遍历数组并打印每个披头士乐队成员的姓名。
创建另一个存储四个国家/地区人口的数组。 编写一个“ for-in”循环,遍历数组,并使用String Interpolation打印一个句子,并将填充值传递到句子中。 例如,“人口为12378932”。