0%

Swift Apprentice系列 (一) : 第一部分:Swift基础知识 - 1、表达式 变量和常量

在第一章中,你将学习一些基础知识。 你将首先了解代码的工作方式。 然后,你将了解用于编写Swift代码的工具。

然后,你将通过学习一些基本知识(例如代码注释算术运算常量变量)来开始使用Swift。 这些是任何语言的一些基本构建基块Swift也不例外。

首先,你将介绍计算机的基本工作原理,因为在进入更复杂的编程方面之前,一定要有基础。

computer的工作方式

当我说这句话时,你可能不相信我,但是计算机本身并不是很聪明。电脑的功能主要来自于你和我这样的人对电脑进行编程的方式。如果你想成功地利用计算机的功能-如果你正在阅读,那么我想你应该这样做-了解计算机的工作方式非常重要。

得知计算机本身是相当简单的机器,也可能使你感到惊讶。计算机的核心是中央处理器(CPU)。这本质上是一台数学机器。它对数字执行加,减和其他算术运算。操作计算机时看到的所有内容都是建立在每秒处理CPU数百万次的基础上的。仅凭数字可以得到的结果令人惊讶吗?

CPU将其作用的数字存储在称为寄存器的小型存储单元中。 CPU能够从计算机的主存储器(称为随机存取存储器(RAM))读取数字到寄存器中。它还可以将存储在寄存器中的数字写回到RAM中。这样一来,CPU便可以处理大量无法全部容纳在寄存器组中的数据。

这是它的工作原理图:

computer的工作方式

CPU将值从RAM提取到其寄存器中时,它将使用其数学单元中的值并将结果存储回另一个寄存器中。

CPU每次执行加,减,从RAM读取或向RAM写入操作时,都会执行一条指令。每个计算机程序通过运行成千上万个简单指令来完成其工作。复杂的计算机程序例如你的操作系统macOS(是的,它也是计算机程序!),包含数百万条指令。

完全可以编写单独的指令来告诉计算机该怎么做,但是除了最简单的程序之外,其他所有程序都将非常耗时且乏味。这是因为大多数计算机程序的目标不仅仅是简单的数学运算-计算机程序使你可以浏览Internet,处理图像并允许与朋友聊天。

你无需编写单独的指令,而可以使用特定的编程语言(在你的情况下为Swift)编写源代码(或仅编写代码)。该代码通过称为编译器的计算机程序进行处理,该程序将代码转换为CPU知道如何执行的那些小型机器指令。你编写的每一行代码都会变成许多指令-有些行最终可能会变成数十条指令!

Representing numbers

众所周知,数字是计算机的基础,它是计算机所做的一切的基础。无论你发送给编译器的任何信息最终都将成为数字。例如,文本块中的每个字符都用数字表示。在第2章中,你将学到更多有关此内容的知识,该章将深入研究各种类型,包括字符串,即一段文本的计算机术语。

图像也不例外。在计算机中,每个图像还由一系列数字表示。图像被分成数千个,甚至数百万个像素,称为像素,其中每个像素都是纯色。如果你仔细查看计算机屏幕,也许可以找出这些障碍。除非你具有像素极小的超高分辨率显示器!这些纯色像素中的每一个通常由三个数字表示:一个代表红色,一个代表绿色,一个代表蓝色。例如,完全红色的像素将是100%红色0%绿色0%蓝色

CPU使用的数字与你习惯的数字明显不同。当你处理日常生活中的数字时,可以使用以10为底的数字,也称为十进制。长期使用此数值系统后,你可以直观地了解其工作原理。为了让你欣赏CPU的观点,请考虑以10为基数的工作原理。

十进制或基数10的数字423包含三个单位,两个十和四百:

10的数字42

在以10为基数的系统中,数字的每个数字可以具有0、1、2、3、4、5、6、7、8或9的值,从而为每个数字总共提供10个可能的值。 是的,这就是为什么它被称为基础10!

但是每个数字的真实值取决于其在数字中的位置。 从右向左移动,每个数字乘以10的幂。因此,最右边位置的乘数为10乘以0的幂,即1。向左移动,下一个乘数为乘以10。 1的幂,即10。再次向左移动,下一个乘数为2的幂,即100。以此类推。

这意味着每个数字的值是其右边数字的十倍。 423等于以下值:

1
(0 * 1000) + (4 * 100) + (2 * 10) + (3 * 1) = 423

二进制数

由于你已经接受过以10为基础操作的培训,因此你无需考虑如何读取大多数数字-感觉很自然。 但是对于计算机而言,以10为基础的方法太复杂了! 电脑头脑简单,还记得吗? 他们喜欢与基地2合作。

Base 2通常称为二进制文件,你以前可能听说过。 因此,以2为底的每个数字只有两个选项:0或1。

几乎所有现代计算机都使用二进制,因为在物理级别上,每个数字仅处理两个选项是最容易的。 在大多数由计算机组成的数字电子电路中,电压的存在为1,电压为0(以2为底)!

注意:已有真实和想象中的计算机使用三进制数字系统,该系统具有三个可能的值而不是两个。 计算机科学家,工程师和敬业的黑客继续探索3基计算机的可能性。 参见https://en.wikipedia.org/wiki/ Ternary_computer 和 http://hackaday.com/tag/ternary-computer/。

这是二进制 1110的表示形式:

二进制数

在以·为底的数字系统中,位置值以10:1、10、100、1000等倍数增长。在以2为底的数字中,以2、1、2、4、8、16等倍数增长。 一般规则是,将每个数字乘以基数的幂(在这种情况下为2的幂)从右向左移动。

因此,最右边的数字表示(1 * 2 ^ 0),即(1 * 1),即1。下一位数字表示(0 * 2 ^ 1),即(0 * 2), 它是0。在上面的插图中,你可以在块的顶部看到2的幂。

换句话说,每个2的幂都是二进制数字的一部分(1)或不(0)。 二进制数的十进制形式是组成该数字的2的所有幂的和。 因此二进制数1101等于:

1
(1 * 8) + (1 * 4) + (0 * 2) + (1 * 1) = 13

而且,如果要将基数10的423转换为二进制,则只需将423分解为2的2的幂。你将得到以下结果:

1
(1 * 256) + (1 * 128) + (0 * 64) + (1 * 32) + (0 * 16) + (0 * 8) + (1 * 4) + (1 * 2) + (1 * 1) = 423

如你所见,通过扫描上述方程中的二进制数字,得出的二进制数为110100111。通过进行数学运算,你可以证明自己等于423!

二进制数的每个数字所用的计算机术语是一位(“二进制数”的缩写)。八位组成一个字节。四位称为半字节,这是一种文字游戏,即使是老派的计算机科学家也能表现出幽默感。

计算机内存有限,这意味着它通常可以处理一定长度的数字。例如,每个寄存器的长度通常为32或64位,这就是我们所说的32位和64位CPU的原因。

因此,一个32位CPU可以处理的最大基数为4,294,967,295,这是基数2的11111111111111111111111111111111111。即32个-算一下!

计算机可以处理大于CPU最大值的数字,但是计算必须以特殊且较长的方式进行拆分和管理,就像你在学校进行的长乘法一样。

十六进制数

可以想象,使用二进制数可能会变得很乏味,因为编写或键入它们可能需要很长时间。 因此,在计算机编程中,我们经常使用另一种数字格式,即十六进制(简称十六进制)。 这是基数16。

当然,没有16个不同的数字可用于数字。 只有10个。为了补充这些内容,我们使用前6个字母,a到f。

它们等效于十进制数字,如下所示:

  • a=10
  • b=11
  • c=12
  • d=13
  • e=14
  • f=15

这是一个以16为基础的示例,其格式与以前相同:

十六进制数

你将字母转换为等效的十进制数,然后执行通常的计算。

但是为什么要为此烦恼呢?

十六进制很重要,因为每个十六进制数字可以精确地表示四个二进制数字。 二进制数1111等效于十六进制f。 因此,你可以简单地将代表每个十六进制数字的二进制数字连接起来,创建一个比其二进制或十进制等效项短的十六进制数字。

例如,考虑上面的数字c0de:

1
2
3
4
5
c = 1100
0 = 0000
d = 1101
e = 1110
c0de = 1100 0000 1101 1110

考虑到计算机如何使用长32位或64位二进制数,这对你很有帮助。 回想一下,十进制中最长的32位数字是4,294,967,295。 以十六进制表示,是ffffffff。 更加简洁明了。

代码如何工作

这就是所谓的伪代码。 它不是使用有效的计算机编程语言编写的,但是它代表了你要使用的算法。 在这种情况下,算法会拍摄照片,调整大小,应用滤镜然后打印。 这是一种相对简单的算法,但是仍然是一种算法!

Swift代码就是这样的:计算机的逐步说明列表。 这些说明将变得更加复杂,但是原理是相同的:你只是一次告诉计算机该做什么。

每种编程语言都是表达这些步骤的高级预定义方式。 编译器知道如何解释你编写的代码并将其转换为CPU可以执行的指令。

有许多不同的编程语言,每种都有其自身的优缺点。 Swift是一种非常现代的语言。 它融合了许多其他语言的优点,同时消除了它们的某些缺点。 在未来的几年中,程序员也会回顾Swift,因为它既旧又硬朗。 但是目前,它是一种非常令人兴奋的语言,因为它正在迅速发展。

这是对计算机硬件,数字表示形式和代码的简要介绍,以及它们如何共同创建现代程序。 一个部分涵盖了很多内容! 现在是时候学习一起使用的用Swift编写的工具了。

Playgrounds

你用来编写软件的工具集通常称为工具链。 你在其中编写代码的工具链部分称为集成开发环境(IDE)Swift最常用的IDE称为Xcode,这就是你要使用的。

Xcode包含一个方便的文档类型,称为“Playgrounds”,它使你可以快速编写和测试代码,而无需构建完整的应用程序。 你将在整本书中使用操场来练习编码,因此了解它们的工作原理非常重要。 这就是其余部分将学到的内容。

创建一个Playgrounds

当你打开Xcode时,它将以以下欢迎屏幕向你打招呼:

创建一个Playgrounds

如果你没有看到此屏幕,则最有可能是因为未选中“启动Xcode时显示此窗口”选项。 你也可以通过按Command-Shift-1或 Window ▸ Welcome to Xcode 从菜单栏中的Xcode打开屏幕。

在欢迎屏幕上,你可以通过单击“Playgrounds入门”快速进入Playgrounds

现在单击它,Xcode将为你提供模板选择。

创建一个Playgrounds

你选择的平台仅定义了Xcode用来创建Playground的模板版本。 当前,你的选择是iOSmacOStvOS。 每个平台都具有自己的环境,可让你开始使用代码。

就本书而言,请选择所需的平台。 你不会编写任何特定于平台的代码; 相反,你将学习Swift语言的核心原理。

选择空白模板,然后单击下一步。 Xcode现在将要求你命名Playground,并选择一个保存位置。

该名称仅是化妆品,仅供你使用。 创建Playground时,请随意选择名称,以帮助你记住它们的含义。 例如,当你学习第1章时,你可能希望将Playground命名为第1章。

单击创建以创建和保存操场。 然后,Xcode向你展示Playground,如下所示:

创建一个Playgrounds

即使是空白的Playground也并非一开始就空无一人,但是有一些基本的入门代码可以帮助你入门。 不用担心-你很快就会了解此代码的含义。

创建一个Playgrounds

上一个屏幕截图重点介绍了需要了解的首要和最重要的事情:

  • 1.源代码编辑器:这是你编写Swift代码的区域。就像记事本或TextEdit等文本编辑器一样。你会注意到使用了等宽字体,即所有字符的宽度相同。这使代码更易于阅读和格式化。
  • 2.结果边栏:此区域显示代码的结果。阅读本书时,你将学到更多有关如何执行代码的信息。结果侧边栏将是你用来确认代码是否按预期工作的主要位置。
  • 3.执行控件:此控件使你可以运行整个Playground文件或清除状态,以便可以再次运行它。默认情况下,Playground不会自动执行。你可以通过长按并选择“自动运行”来更改此设置以执行每次更改。
  • 4.活动查看器:这显示了操场的状态。在屏幕截图中,它显示了Playground已完成执行并准备在源代码编辑器中处理更多代码。当Playground正在执行时,该观众将通过微调器指示此情况。
  • 5.面板控件:这些切换开关显示和隐藏三个面板,一个面板显示在左侧,一个面板显示在底部,另一个面板显示在右侧。每个面板都显示你可能需要不时访问的其他信息。你通常会将它们隐藏起来,如屏幕截图所示。在阅读本书时,你将了解有关每个面板的更多信息。

你可以通过单击 Xco​​de▸首选项...▸文本编辑▸行号 在源代码编辑器的左侧打开行号。当你要引用代码的某些部分时,行号可能非常有用。

操场从上到下在源代码编辑器中执行代码。当你将光标移到每行旁边时,播放按钮将浮在每行旁边,并允许你从文件的开头一直运行到包括单击的行。要强制执行,可以单击两次执行控制按钮-一次停止并清除它,然后再次运行。

一旦完成Playground执行Xcode就会更新结果侧栏,以在源代码编辑器中显示相应行的结果。通过本书中的示例,你将了解如何解释代码的结果。

注意:在某些情况下,你可能会发现Xcode 11错误地禁用了基于行的执行。 在这些情况下,只需使用执行控制按钮即可运行整个Playground

Swift入门

现在你已经了解了计算机的工作原理,并且知道了什么是“Playground”,现在该开始编写一些Swift了!
你可能希望跟随自己的Playground。 只需创建一个,然后输入代码即可!

首先是可以帮助你组织代码的东西。 继续阅读!

代码注释

Swift编译器从你的源代码生成可执行代码。 为此,它使用了一组详细的规则,你将在本书中学习这些规则。 有时,这些细节可能使你无法以某种方式编写代码,甚至无法解决所遇到的问题。 为避免这种情况,最好记录下你的所作所为,以便下一个路过的人能够理解你的工作。 毕竟,下一个人可能是你的未来。

与大多数其他编程语言一样,Swift允许你使用所谓的注释来记录代码。 这些允许你直接在代码旁边编写任何文本,并且编译器会忽略它们。

写评论的第一种方法是这样的:

1
// This is a comment. It is not executed.

这是一行注释。

你可以像这样将它们堆叠起来以允许你编写段落:

1
2
// This is also a comment. 
// Over multiple lines.

但是,有一种更好的方式来编写跨越多行的注释。 像这样:

1
2
3
/* This is also a comment. Over many..
many...
many lines. */

这是多行注释。 开头用/*表示,结尾用*/表示。 简单!

Swift还允许你嵌套注释,如下所示:

1
2
3
4
/* This is a comment.
/* And inside it is
another comment. */
Back to the first. */

这似乎并不特别有趣,但是如果你已经看过其他编程语言,则可能会如此。 许多内容不允许你像这样嵌套注释,因为它看到第一个* /并认为你正在关闭第一个注释。 你应该在必要的地方使用代码注释来记录代码,解释原因或只是为同事们开玩笑。 :]

Printing out

查看代码执行结果也很有用。 在Swift中,你可以通过使用print命令来实现。
print会将所需的任何内容输出到调试区域(有时称为控制台)。

例如,考虑以下代码:

1
print("Hello, Swift Apprentice reader!")

这将向调试区域输出一条不错的消息,如下所示:

创建一个Playgrounds

你可以使用上图中用红色框突出显示的按钮隐藏或显示调试区域。 你也可以单击 View ▸ Debug Area ▸ Show Debug Area 来执行相同的操作。

算术运算

当你获取一个或多个数据并将其转换为另一数据时,这称为操作。

理解运算的最简单方法是考虑算术。 加法运算取两个数字并将它们转换为两个数字的和。 减法运算取两个数字并将其转换为两个数字的差。

你会在所有应用程序中找到简单的算法; 从计算帖子中的“赞”数量到计算按钮或窗口的正确大小和位置,数字的确无处不在!

在本部分中,你将通过考虑Swift如何应用于数字来了解Swift必须提供的各种算术运算。 在后面的章节中,你将看到除数字以外的其他类型的操作。

简单运算

Swift中的所有操作都使用一个称为运算符的符号来表示其执行的操作类型。 考虑一下你在上学时学习的四个算术运算:加法,减法,乘法和除法。 对于这些简单的操作,Swift使用以下运算符:

  • Add: +
  • Subtract: -
  • Multiply: *
  • Divide: /

这些运算符的用法如下:

1
2
3
4
2+6 
10 - 2
2*4
24 / 3

这些行中的每一行都是一个表达式,表示每行都有一个值。 在这些情况下,所有四个表达式都具有相同的值:注意代码看起来与你用笔和纸写出的操作类似。 你可以直接将这些输入操场。

创建一个Playgrounds

浅蓝色的行号是尚未运行的行号。 要运行代码,请单击光标旁边最后一行上的浅蓝色播放按钮。

运行后,操场从运行的行中删除了蓝色的侧边栏,你还可以在右侧栏中看到这些表达式的值,称为结果侧边栏。

创建一个Playgrounds

如果需要,可以删除运算符周围的空格:

1
2+6

进行此更改后,蓝色的侧边栏会重新出现,以指示需要重新运行的行。 你可以通过单击蓝色箭头或使用快捷键Shift-Enter再次运行。

注意:Shift-Enter会运行所有语句直到当前光标,然后前进到下一行。 这样可以轻松地继续按Shift-Enter并逐步运行整个Playground。 这是致力于肌肉记忆的绝佳捷径。

删除空格是全有或全无,你无法混合样式。 例如:

1
2
3
4
2+6   // OK
2 + 6 // OK
2 +6 // ERROR
2+ 6 // ERROR

第一个错误是:

1
Consecutive statements on a line must be separated by ';'

对于第二个错误,你将看到:

1
'+' is not a postfix unary operator

你现在不需要了解这些错误消息。 请注意,操作符的两边都必须有空格,或者两边都不能有空格!

两侧都有空格时,阅读表达式通常会更容易。

小数

上面的所有操作都使用整数,更正式地称为整数。 但是,你会知道,并非每个数字都是整数。

例如,请考虑以下内容:

1
22 / 7

你可能会惊讶地知道,结果为3。这是因为,如果你仅在表达式中使用整数,Swift还将结果也设为整数。 在这种情况下,结果将四舍五入到下一个整数。

你可以通过将Swift更改为以下内容来告诉Swift使用十进制数字:

1
22.0 / 7.0

这次,结果是预期的3.142857142857143。

其余操作

到目前为止,你已经看过四个操作,这很容易理解,因为你一生都在进行这四个操作。 Swift还具有你可以使用的更复杂的操作,所有这些操作都是标准的数学操作,只是不太常见的操作。 让我们现在转向他们。

首先是余数运算,也称为模运算。 在除法中,分母多次进入分子,再乘以余数。 余数正是余数运算给出的。 例如,10模3等于1,因为3乘以10等于3的三倍,余数为1。

在Swift中,余数运算符是%符号,你可以这样使用它:

1
28 % 10

在这种情况下,结果等于8,因为10两次进入28,其余为8。如果要使用十进制数字计算相同的事物,你可以这样做:

1
(28.0).truncatingRemainder(dividingBy: 10.0)

该计算将28除以10,然后将结果截断,切掉所有多余的小数,然后返回余数。 没有小数时,结果与%相同。

位移操作符

左移和右移运算采用十进制数的二进制形式,并且分别将数字左移或右移。 然后,它们返回新二进制数的十进制形式。

例如,二进制的十进制数字14(填充到8位数字)为00001110。将其左移两位将得到00111000,十进制为56。

这是在此位移操作期间发生的情况的说明:

创建一个Playgrounds

用来填充右侧空白点的数字将变为0。落在左侧末尾的数字将丢失。

向右移动是相同的,但数字向右移动。 这两个操作的运算符如下:

  • Shift left: <<
  • Shift right: >>

这些是你首次见到的包含多个字符的运算符。 实际上,运算符可以包含任意数量的字符。

这是同时使用这两个运算符的示例:

1
2
1 << 3 
32 >> 2

这两个值都等于数字8。

使用移位的原因之一是使乘以或除以2的幂变得容易。 请注意,左移等于乘以二,左移等于乘以四,依此类推。

同样,右移等于除以二,右移等于除以四,依此类推。

在过去,代码经常利用此技巧,因为对于CPU而言,移位位比复杂的乘法和除法算法简单得多。 因此,如果使用移位,则代码会更快。

但是,如今,CPU的速度要快得多,编译器甚至可以为你转换乘和除以2的幂。 因此,你将看到只为二进制处理而转移,除非你成为嵌入式系统程序员,否则你可能不会看到!

操作顺序

当然,当你计算一个值时,可能需要使用多个运算符。 这是一个如何在Swift中执行此操作的示例:

1
((8000 / (5 * 10)) - 32) >> (29 % 5)

请注意括号的使用,在Swift中,括号有两个作用:使所有阅读代码的人(包括你自己)清楚明白你的意思,并消除歧义。 例如,考虑以下内容:

1
350 / 5 + 2

这等于72(350除以5,再加上2)还是50(350除以7)? 你们那些在学校受到关注的人会尖叫“ 72!” 你会是对的!

Swift使用相同的推理,并通过所谓的运算符优先级来实现这一目的。 除法运算符(/)的优先级高于加法运算符(+),因此在此示例中,代码首先执行除法运算。

如果你想让Swift首先进行加法(即返回50),则可以使用如下括号:

1
350 / (5 + 2)

优先规则遵循你在学校数学学习的规则。 乘法和除法具有相同的优先级,高于加法和减法也具有相同的优先级。

数学函数

Swift还具有广泛的数学函数供你在必要时使用。 你永远不会知道何时需要使用一些三角函数,尤其是当你是Swift的专业人士并编写那些复杂的游戏时!

注意:Swift还具有广泛的数学函数供你在必要时使用。 你永远不会知道何时需要使用一些三角函数,尤其是当你是Swift的专业人士并编写那些复杂的游戏时!

例如,考虑以下内容:

1
2
sin(45 * Double.pi / 180) // 0.7071067811865475
cos(135 * Double.pi / 180) // -0.7071067811865475

这些将角度从度转换为弧度,然后分别计算正弦和余弦。 请注意,两者都是如何利用Double.pi(这是Swift的一个常量)为我们提供的,它已经可以使用pi尽可能精确地由计算机提供。 整齐!

然后是这样的:

1
(2.0).squareRoot() // 1.414213562373095

这样计算出2的平方根。你知道45°的正弦等于2的平方根吗? 试试看!

不提这些将是一个耻辱:

1
2
3
4
max(5, 10)
// 10
min(-5, -10)
// -10

它们分别计算两个数字的最大值和最小值。

如果你特别喜欢冒险,甚至可以结合使用以下功能:

1
max((2.0).squareRoot(), Double.pi / 2) // 1.570796326794897

命名数据

最简单的说,计算机编程就是处理数据。 请记住,你在屏幕上看到的所有内容都可以减少为发送给CPU的数量。 有时,你以各种类型的数字来表示和使用此数据,但有时,数据以更复杂的形式出现,例如文本,图像和集合。

在你的Swift代码中,你可以为每个数据赋予一个名称,以供以后使用。 该名称带有一个关联的类型,该类型表示名称所指的数据类型,例如文本,数字或日期。 你将在本章中了解一些基本类型,并且在本书中还会遇到许多其他类型。

常量

看看这个:

1
let number: Int = 10

这声明了一个称为Int类型的常量number。 然后设置值数字10的常数。

注意:回想一下操作符,这是另一种。 等号=,称为赋值运算符。

Int类型可以存储整数。 存储十进制数字的方式如下所示:

1
let pi: Double = 3.14159

除了名称和类型不同外,这与Int常量相似。 这次,常量为Double,该类型可以高精度存储小数。

还有一种叫做Float的类型,是浮点数的缩写,它以比Double更低的精度存储小数。 实际上,Double的精度大约是Float的两倍,这就是为什么它首先被称为Double的原因。 Float占用的内存少于Double占用的内存,但是通常来说,数字占用的内存并不是一个大问题,并且你会在大多数地方看到Double占用的内存。

声明常数后,就无法更改其数据。 例如,考虑以下代码:

1
number = 0

这段代码产生一个错误:

1
Cannot assign to value: 'number' is a 'let' constant

在Xcode中,你将看到以这种方式表示的错误:

创建一个Playgrounds

常数对于不会改变的值很有用。 例如,如果你要对飞机建模,并且需要参考已安装的座椅总数,则可以使用常数。

你甚至可以使用常数来表示某个人的年龄。 即使他们的年龄会随着生日的到来而改变,但你可能只关心他们在这个特定时刻的年龄。

变量

通常,你想更改名称后面的数据。 例如,如果你通过存款和提款跟踪银行帐户余额,则可以使用变量而不是常量。

如果你程序的数据从未更改过,那将是一个相当无聊的程序! 但是正如你所看到的,不可能在常量后面更改数据。

当你知道需要更改某些数据时,应使用变量代替常量来表示该数据。 你可以通过类似的方式声明变量,如下所示:

1
var variableNumber: Int = 42

仅语句的第一部分有所不同:使用let声明常量,而使用var声明变量。

声明变量后,只要类型保持不变,就可以随意将其更改为所需的值。 例如,要更改上面声明的变量,可以执行以下操作:

1
2
variableNumber = 0 
variableNumber = 1_000_000

要更改变量,你只需为其分配一个新值。

注意:在Swift中,你可以选择使用下划线来使较大的数字更易于理解。 下划线的数量和位置由你决定。

现在是仔细查看Playground结果边栏的好时机。 在操场上键入上面的代码时,你会看到右侧的结果侧边栏在每一行显示了variableNumber的当前值:

创建一个Playgrounds

结果边栏将显示每一行的相关结果(如果存在)。 对于变量或常量,无论你刚刚声明了常量,还是声明或重新分配了变量,结果都是新值。

使用有意义的名称

始终尝试为变量和常量选择有意义的名称。 好的名称充当文档,使你的代码易于阅读。

一个好名字专门描述了变量或常量的作用。 以下是一些好名字的例子:

  • personAge
  • numberOfPeople
  • gradePointAverage

通常,一个坏名字根本无法描述。 这是一些坏名的例子:

  • a
  • temp
  • average

关键是要确保你稍后再阅读该变量或常量时,将理解其含义。 不要以为自己的记忆力是绝对正确的! 在计算机编程中,很常见的情况是,早在一两天后便回头看自己的代码,而忘记了它的功能。 通过为变量和常量赋予直观,精确的名称,可以使自己更轻松。

另外,请注意上面的名称是如何写的。 在Swift中,驼峰案例名称很常见。 对于变量和常量,请遵循以下规则以正确区分大小写:

  • 以小写字母开头。
  • 如果名称由多个单词组成,则将它们连接在一起,然后每隔一个大写字母开头一个单词。
  • 如果其中一个单词是缩写,请在相同情况下写出整个缩写(例如:sourceURL和urlDescription)

Swift中,你甚至可以使用所有Unicode字符。 例如,你可以像这样声明一个变量:

1
var ! " : Int = -1

这可能会让你发笑,但请谨慎使用此类特殊字符。 他们较难打字,可能给你带来的痛苦多于娱乐。

像这样的特殊字符可能在你存储的数据中比在Swift代码中更有意义。 你将在第9章“字符串”中了解有关Unicode的更多信息。

递增和递减

你需要执行的常见操作是能够增加或减少变量。 在Swift中,这是这样实现的:

1
2
3
4
var counter: Int = 0
counter += 1
// counter = 1
counter -= 1 // counter = 0

计数器变量从0开始。递增将其值设置为1,然后递减将其值设置回0。

这些运算符与赋值运算符(=)相似,除了它们还执行加法或减法。 它们采用变量的当前值,对给定值进行加或减,然后将结果分配给变量。

换句话说,以上代码是以下内容的简写:

1
2
3
var counter: Int = 0 
counter = counter + 1
counter = counter - 1

同样, *=/= 运算符分别对乘法和除法等效:

1
2
3
4
5
6
counter = 10
counter *= 3 // same as counter = counter * 3
// counter = 30
counter /= 2 // same as counter = counter /
2
// counter = 15
坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道