前言
林奇定律说:“当情况变得艰难时,每个人都会离开。”任何人都可以完成课程的第一天,但需要勤奋才能回到第二天——坚持下去做得很好!
昨天我们开始研究简单的数据类型——包含一个值的东西,比如一个数字或一串字母。今天,我们将继续探索用布尔值存储真假,用插值方式构建字符串。在不同的时候,你可能会想“我真的需要知道这个吗?”答案是肯定的——如果它在本课程中,你绝对需要知道!
但今天发生了一件重要的事情,因为你也将有你的第一个学习情况检查。这就是我们要暂停的地方,这样你就可以编写一些自己的代码,以确保你完全理解了所呈现的内容。从一张空白画布开始一开始会很难,但你应该有很多时间,我也会提供提示。
今天,您有两个新的教程要学习,还有一个摘要和一个检查点要完成。和以前一样,如果你想更深入地了解每个主题,有一些可选的进一步阅读,但除非你想,否则你不需要阅读。
如何使用布尔类型
到目前为止,我们已经研究了字符串、整数和小数,但还有第四种类型的数据:一种非常简单的布尔类型,它存储true或false。如果你好奇的话,布尔值是以英国数学家乔治·布尔的名字命名的,他花了大量时间研究和写作逻辑。
我说布尔值偷偷溜进来是因为你已经见过他们几次了:
let filename = "paris.jpg"
print(filename.hasSuffix(".jpg"))
let number = 120
print(number.isMultiple(of: 3))
hasSuffix()和isMultiple(of:)都会根据它们的检查返回一个新值:字符串要么有后缀,要么没有后缀,120要么是3的倍数,要么不是。在这两个地方,总是有一个简单的真或假答案,这就是布尔值的作用所在——它们只存储这个答案,而不存储其他任何东西。
制作布尔值就像制作其他数据类型一样,除了你应该分配一个true或false的初始值,如下所示:
let goodDogs = true
let gameOver = false
你也可以从其他代码中分配布尔值的初始值,只要它最终为真或假:
let isMultiple = 120.isMultiple(of: 3)
与其他类型的数据不同,布尔值没有+和-等算术运算符——毕竟,true+true等于多少?然而,布尔值确实有一个特殊的运算符!,这意味着“不”。这会将布尔值从true翻转为false,或从false翻转为true。
例如,我们可以像这样翻转布尔值:
var isAuthenticated = false
isAuthenticated = !isAuthenticated
print(isAuthenticated)
isAuthenticated = !isAuthenticated
print(isAuthenticated)
这将在运行时打印“true”然后“false”,因为isAuthenticated以false开头,我们将其设置为not false,这是true,然后再次翻转它,使其变回false。
布尔值确实有一些有用的额外功能。特别是,如果你对布尔值调用toggle(),它会将真值翻转为假,将假值翻转为真。要尝试此方法,请尝试将gameOver设置为变量并按如下方式修改它:
var gameOver = false
print(gameOver)
gameOver.toggle()
print(gameOver)
这将首先打印false,然后在调用toggle()后打印true。是的,这和使用是一样的!只需要稍微少一点的代码,但当你处理复杂的代码时,它非常有用!
如何拼接字符串
Swift为我们提供了两种将字符串组合在一起的方法:使用+连接它们,以及一种称为字符串插值的特殊技术,可以将任何类型的变量直接放置在字符串中。
让我们先从更简单的选项开始,即使用+将字符串连接在一起:当你有两个字符串时,你可以使用+将它们连接成一个新的字符串,如下所示:
let firstPart = "Hello, "
let secondPart = "world!"
let greeting = firstPart + secondPart
如果需要,您可以多次执行此操作:
let people = "Haters"
let action = "hate"
let lyric = people + " gonna " + action
print(lyric)
当它运行时,它将打印“Haters going hate”-是的,我是Taylor Swift的忠实粉丝,我认为她的歌词非常适合Swift编程教程!
注意我们是如何使用+连接两个字符串的,但当我们使用Int和Double时,它把数字加在一起了?这被称为运算符重载——一个运算符(如+)根据其使用方式表示不同含义的能力。对于字符串,它也适用于+=,它将一个字符串直接添加到另一个字符串中。
这种技巧对小事很有效,但你不想做得太多。你看,每次Swift看到两个字符串使用+连接在一起时,它都必须在继续之前从它们中创建一个新的字符串,如果你有很多东西被连接在一起,那就相当浪费了。
思考下这个例子:
let luggageCode = "1" + "2" + "3" + "4" + "5"
Swift无法一次性连接所有这些字符串。相反,它将前两个连接起来形成“12”,然后连接“12”和“3”形成“123”,再连接“123”和“4”形成“1234”,最后连接“1234”和“5”形成“12345”——它会制作临时字符串来保存“12”、“123”、“1234”——即使它们在代码完成时最终没有被使用。
Swift有一个更好的解决方案,称为字符串插值,它可以让我们有效地从其他字符串创建字符串,也可以从整数、十进制数等创建字符串。
如果你还记得,我之前说过,你可以在字符串中包含双引号,只要它们前面有一个反斜杠,这样Swift就知道要特别对待它们:
let quote = "Then he tapped a sign saying \"Believe\" and walked away."
字符串插值也使用了类似的方法:在字符串中写一个反斜杠,然后将变量或常量的名称放在括号内。
例如,我们可以创建一个字符串常量和一个整数常量,然后将它们组合成一个新的字符串:
let name = "Taylor"
let age = 26
let message = "Hello, my name is \(name) and I'm \(age) years old."
print(message)
当该代码运行时,它将打印“你好,我的名字是Taylor,我今年26岁。”
字符串插值比使用+逐一连接字符串要高效得多,但还有另一个重要的好处:你可以在不做额外工作的情况下引入整数、小数等。
你看,使用+可以让我们将字符串添加到字符串中,将整数添加到整数中,将小数添加到小数中,但不允许我们向字符串中添加整数。因此,这种代码是不允许的:
let number = 11
let missionMessage = "Apollo " + number + " landed on the moon."
如果你愿意,你可以让Swift把这个数字当作字符串来处理,就像这样:
let missionMessage = "Apollo " + String(number) + " landed on the moon."
使用字符串插值仍然更快、更容易阅读:
let missionMessage = "Apollo \(number) landed on the moon."
提示:如果你愿意,你可以把计算放在字符串插值中。例如,这将打印“5 x 5等于25”:
print("5 x 5 is \(5 * 5)")
评论区