前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift入门: 循环

Swift入门: 循环

作者头像
韦弦zhy
发布2020-03-19 20:48:18
8250
发布2020-03-19 20:48:18
举报
\color{red}{\Huge \mathtt{SWIFT}}
\color{red}{\Huge \mathtt{SWIFT}}
\color{orange}{\Large \mathbf{循环}}
\color{orange}{\Large \mathbf{循环}}
\underline{\color{#3399CC}{\large \mathit{Loops}}}
\underline{\color{#3399CC}{\large \mathit{Loops}}}

电脑很擅长在你读这句话的时间里完成数十亿次无聊的任务。在代码中重复任务时,可以多次复制和粘贴代码,也可以使用循环——只要条件为真,就可以重复一段代码的简单编程构造。

为了演示这一点,我想向您介绍一个名为print()的特殊调试函数:您给它一些要打印的文本,它将打印它。如果你和我在Playground运行的一样,你会看到你的文本出现在结果窗口中。如果你在Xcode中运行一个真正的应用程序,你会看到你的文本出现在Xcode的日志窗口中。不管怎样,print()都是窥视变量内容的好方法。 看看这个代码:

代码语言:javascript
复制
print("1 x 10 is \(1 * 10)")
print("2 x 10 is \(2 * 10)")
print("3 x 10 is \(3 * 10)")
print("4 x 10 is \(4 * 10)")
print("5 x 10 is \(5 * 10)")
print("6 x 10 is \(6 * 10)")
print("7 x 10 is \(7 * 10)")
print("8 x 10 is \(8 * 10)")
print("9 x 10 is \(9 * 10)")
print("10 x 10 is \(10 * 10)")

完成运行后,您将在结果窗格中显示“10倍”表。但这几乎不是有效的代码,事实上,一个更干净的方法是使用所谓的闭合范围运算符循环一系列数字,这是连续三个点:...

使用闭合范围运算符,我们可以用三行重新编写整个过程: for i in 1...10 { print("(i) x 10 is (i * 10)") } 结果窗格只显示循环的“(10次)”,这意味着循环运行了10次。如果您想知道循环实际做了什么,请立即单击“(10次)右侧的正方形。您将看到一个框,上面写着“10x10 is 100”,如果您右键单击它,您将看到选项“Value History”。现在点击它,你会看到下面的图片:

循环的作用是从1到10(包括1和10)进行计数,将该数字赋给常数i,然后在大括号内运行代码块。

如果你不需要知道你的号码,你可以用下划线代替。例如,我们可以打印一些泰勒·斯威夫特的歌词如下:

代码语言:javascript
复制
var str = "Fakers gonna"

for _ in 1 ... 5 {
    str += " fake"
}

print(str)

每次循环进行时,都会在字符串中添加“Fakers gonna fake fake fake fake fake fake fake fake”字样。

如果Swift不必每次循环都将每个数字赋给一个变量,那么它可以更快地运行代码。因此,如果你在for i in…中使用i,Xcode会建议您将其更改_

有一种称为半开区间运算符,它们很容易混淆。半开区间运算符看起来像..<,从一个数字向上计数,不包括另一个数字。例如,1..<5将计算1、2、3、4。

在数组上循环

Swift提供了一种非常简单的方法来循环数组中的所有元素。因为Swift已经知道数组保存的是什么类型的数据,它将遍历数组中的每个元素,将其分配给您命名的常量,然后运行代码块。例如,我们可以打印出这样一个歌曲的列表:

代码语言:javascript
复制
var songs = ["Shake it Off", "You Belong with Me", "Look What You Made Me Do"]

for song in songs {
    print("My favorite song is \(song)")
}

您还可以使用for i in循环构造遍历数组,因为您可以使用该常量索引到数组中。我们甚至可以使用它来索引成两个数组,如下所示:

代码语言:javascript
复制
var people = ["players", "haters", "heart-breakers", "fakers"]
var actions = ["play", "hate", "break", "fake"]

for i in 0 ... 3 {
    print("\(people[i]) gonna \(actions[i])")
}

您可能想知道半开放范围运算符有什么用途,但它对于处理数组特别有用,因为数组从零开始计数。因此,我们不必从0到3(包括3)进行计数,而是可以从0到3(不包括数组中的项数)进行计数。

记住:它们是从零开始计算的,所以如果它们有4个项,那么最大索引是3,这就是为什么我们需要将4排除在循环之外。

要计算数组中有多少项,请使用somerarray.count。所以,我们可以这样重写代码:

代码语言:javascript
复制
var people = ["players", "haters", "heart-breakers", "fakers"]
var actions = ["play", "hate", "break", "fake"]

for i in 0 ..< people.count {
    print("\(people[i]) gonna \(actions[i])")
}
嵌套循环

如果你想的话,你可以把循环放在循环里,甚至把循环放在循环里——尽管你可能会突然发现你做了1000万次的事情,所以要小心!

我们可以组合前面的两个循环来创建:

代码语言:javascript
复制
var people = ["players", "haters", "heart-breakers", "fakers"]
var actions = ["play", "hate", "break", "fake"]

for i in 0 ..< people.count {
    var str = "\(people[i]) gonna"

    for _ in 1 ... 5 {
        str += " \(actions[i])"
    }

    print(str)
}

输出“players gonna play play play play play”,然后“haters gonna…”好吧,你明白了。

一个重要的注意事项:尽管程序员通常使用ij甚至k作为循环常量,但是您可以随意命名它们:for personNumber in 0 ..< people.count是完全有效的。

While 循环

您将看到第三种循环,它重复一段代码,直到您告诉它停止为止。这是用来做一些事情,如游戏循环,你事先不知道游戏将持续多久-你只是不断重复“检查触摸,动画机器人,绘制屏幕,检查触摸…”等,直到最终用户点击按钮退出游戏并返回主菜单。

这些循环称为while循环,它们如下所示:

代码语言:javascript
复制
var counter = 0

while true {
    print("Counter is now \(counter)")
    counter += 1

    if counter == 556 {
        break
    }
}

这段代码引入了一个新的关键字break。它用于在您决定的某个点退出一段时间或退出一个循环。没有它,上面的代码永远不会结束,因为要检查的条件只是“true”,而true总是true。没有break语句,循环就是一个无限循环,这是一件坏事。

当您使用未知数据时,这些while循环最有效,例如从internet下载数据、从XML等文件读取数据、查看用户输入等等。这是因为只有在运行循环足够多次之后,才知道何时停止循环。

有一个对应的break称为continue。虽然中断循环会立即停止执行并在循环之后直接继续,但继续循环只会退出循环的当前迭代-它将跳回到循环的顶部并从那里开始。

例如,请思考下面的代码:

代码语言:javascript
复制
var songs = ["Shake it Off", "You Belong with Me", "Look What You Made Me Do"]

for song in songs {
    if song == "You Belong with Me" {
        continue
    }

    print("My favorite song is \(song)")
}

这首歌循环播放了三首泰勒·斯威夫特的歌曲,但只会打印出两首的名字。原因是continue关键字:当循环尝试使用歌曲“You Belong with Me”时,continue会被调用,这意味着循环会立即跳回到开始处–print()调用从未进行过,相反循环会继续直接“Look What You Made Me Do”。

本文来自Hacking with Swift给swift初学者的入门课程Swift for Complete Beginners Loops

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在数组上循环
    • 记住:它们是从零开始计算的,所以如果它们有4个项,那么最大索引是3,这就是为什么我们需要将4排除在循环之外。
    • 嵌套循环
    • While 循环
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档