原文:Swift Tutorial Part 1: Expressions, Variables and Constants

欢迎来到咱们的迷你系列之开端运用 Swift 编程!

在这个系列中,你将学习一些编程的基础知识,同时在一个现代的、友爱的开发环境中运用 Swift 编程言语。

咱们不会用许多的理论来干扰你,你将经过运用 Swift Playgrounds 当即开端编写代码,这是一种相似沙盒的环境,你可以直接运转代码,而不需求编写整个应用程序。

在本教程中,你需求 Xcode 10,即 macOS 的规范开发环境。假如你的 Xcode 版别为 9 或更低,本教程中的一些代码或许不能按期运转。

开端

你用来编写软件的东西集一般被称为东西链。在东西链中,你编写代码的部分被称为集成开发环境(IDE)。Xcode 是你的 IDE,它包含 playgrounds。

在这个系列中,你将运用 playgrounds 来练习编程,所以了解它们的作业原理很重要。这便是你将在本教程的其余部分学习的内容。

创立一个 Playground

当你翻开 Xcode 时,它将以下面的欢迎界面迎接你:

Swift 教程 Part1:表达式,变量和常量

假如你没有看到这个屏幕,很或许是由于 Show this window when Xcode launches( Xcode 发动时显现这个窗口 ) 的选项没有被选中。你也可以经过按 Command-Shift-1 来翻开这个屏幕。你也可以从菜单栏中点击 Window ▸ Welcome to Xcode

在欢迎屏幕上,你可以经过点击 Get started with a playground 来快速翻开一个 playground。现在点击它,Xcode 将为你供给一个模板的挑选界面。

Swift 教程 Part1:表达式,变量和常量

你挑选的渠道仅仅界说了 Xcode 将运用哪个版别的模板来创立 playground。现在,你可以挑选的是 iOS、macOS 或 tvOS。每个渠道都有自己的环境设置,并准备好让你开端在里面玩代码。就本教程而言,挑选你期望的任何渠道。你不会写任何特定渠道的代码;相反,你将学习 Swift 言语的中心原理。

挑选 Blank 空白模板并点击下一步。Xcode 现在会要求您为 playground 命名并挑选一个位置来保存它。这个姓名仅仅表面上的,供你自己运用;当你创立你的 playground 时,请随意挑选能协助你记住它们是什么的姓名。

点击 Create 来创立和保存 playground。然后 Xcode 会向你展现这个 playground,像这样。

Swift 教程 Part1:表达式,变量和常量

新的 playgrounds 开端时并不完全是空白的,而是有一些根本的发动代码来让你开端。不要担心–你很快就会了解这些代码的含义。

Playgrounds 预览

乍一看,playground 或许看起来像一个相当花哨的文本编辑器。那么,这儿有一些消息给你。它本质上便是这样的!

Swift 教程 Part1:表达式,变量和常量

上面的截图强调了以下首要和最重要的工作:

  1. 源码编辑器。这是你编写 Swift 代码的区域。它很像一个文本编辑器,如记事本或TextEdit。你会留意到,它运用了所谓的单色字体,这意味着全部的字符都是相同的宽度。这使得代码更简略阅览和格式化。
  2. 成果侧边栏:这个区域显现了你履行代码时的成果。在你阅览本系列文章时,你会了解到更多关于代码怎么履行的信息。成果侧边栏是你承认你的代码是否按预期作业的首要地方。
  3. 履行操控。playground 默认是主动履行的,这意味着你可以编写代码并当即看到输出。这个控件答应你再次履行操场。按住 ▶︎(履行)按钮可以在主动履行和手动履行模式之间切换。
  4. 活动检查器。它显现 playground 的状态。在上面的截图中,它显现 playground 已完结履行,并准备好在源码编辑器中处理更多代码。当 playground 正在履行时,检查器将用一个旋转器表明。
  5. 面板操控。这些切换开关显现和躲藏三个面板,一个出现在左面,一个在底部,一个在右边。这些面板别离显现你或许需求经常拜访的额定信息。你一般会把它们躲藏起来,就像截图中那样。当你完结这个系列时,你会了解到更多关于这些面板的信息。

Playgrounds 从上到下履行源码编辑器中的代码。每次你改动代码,Playgrounds 都会从头履行全部内容。你也可以经过点击菜单栏中的 Editor ▸ Run Playground 来强制从头履行。另外,你也可以运用履行操控。

你可以经过点击菜单栏中的 Xcode ▸ Preferences… ▸ Text Editing ▸ Line Numbers 在源码编辑器左侧显现行数。当你想引用你的代码的一部分时,行号对错常有用的。

一旦 playground 履行结束,Xcode 就会更新成果侧栏,以显现源编辑器中相应行的成果。当你完结本系列的比如时,你会看到怎么解说你的代码的成果。

代码注释、算术运算、常量和变量是任何言语的一些根本构建模块,Swift 也不例外。

代码注释

Swift 编译器从你的源代码中生成可履行代码。为了完成这一方针,它运用了一套具体的规矩。有时,这些细节会掩盖你为什么以某种办法写代码的蓝图,或许你想要解决的问题。为了避免这种状况,最好把你写的东西记载下来,以便下一个接手的人可以了解你的作业。毕竟,下一个人,或许便是未来的你。:]

Swift,像其他大多数编程言语相同,答应你经过运用所谓的注释来记载你的代码。这些注释答应你在代码周围直接写任何文字,而编译器会疏忽这些文字。

写注释的第一种办法是这样的:

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

这是一个单行注释。你可以像这样把这些堆起来,让你写阶段:

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

可是,有一种更好的办法来编写跨过多行的注释。像这样:

/* This is also a comment.
   Over many...
   many...
   many lines. */

这是一个多行注释。开端部分用/*表明,结束部分用*/表明。非常简略!

你应该在必要时运用代码注释来记载你的代码,解说你的目的,或许仅仅是为你的同事留下笑柄。:]

打印输出

检查代码所履行的成果也很有用。在 Swift 中,你可以经过运用 print 指令来完成这一点。

print 会将你想要的东西输出到调试区,有时也被称为操控台。

例如,考虑下面的代码:

print("Hello, Swift Apprentice reader!")

这将向调试区输出一条美丽的信息,像这样:

Swift 教程 Part1:表达式,变量和常量

你可以运用上图中红色显现的向下箭头的方框按钮来躲藏或显现调试区。你也可以点击菜单栏中的 View ▸ Debug Area ▸ Show Debug Area 来做相同的工作。

算术运算

当你取一个或多个数据并将它们变成另一个数据时,这被称为运算

了解运算的最简略办法是考虑算术。加法运算需求两个数字,并将它们转化为两个数字的总和。减法运算需求两个数字,并将它们转换为两个数字的差。

你会发现你的应用程序中到处都是简略的算术。从统计一个帖子的“喜爱”数量到核算一个按钮或一个窗口的正确巨细和位置,数字的确无处不在。

在本节中,你将学习 Swift 供给的各种算术运算,考虑它们怎么适用于数字。稍后,你会看到数字以外的其他类型的运算。

简略运算

Swift 中的全部操作都运用一个被称为操作符的符号来表明它们履行的操作类型。

考虑一下你在早期上学时学到的四种算术运算:加法、减法、乘法和除法。关于这些简略的操作,Swift 运用以下运算符:

  • 加法:+
  • 减法:-
  • 乘法:*
  • 除法:/

这些运算符是这样运用的:

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

这些行中的每一行都是所谓的 “表达式”。一个表达式有一个值。在这些状况下,全部四个表达式都有相同的值:8。你写代码来履行这些算术运算,就像你用纸笔写代码相同。

Swift 教程 Part1:表达式,变量和常量

在你的 playground 中,你可以在右边的栏里看到这些表达式的值,被称为成果侧边栏,像这样:

Swift 教程 Part1:表达式,变量和常量

假如你愿意,你也可以删去运算符周围的空白:

2+6

移除空白是一件全有或全无的工作:你不能混合运用各种风格。比如说:

2+6   // OK
2 + 6 // OK
2 +6  // ERROR
2+ 6  // ERROR

假如你在运算符的两头留有空白,一般更简略阅览表达式。

十进制数字

上面的全部操作都运用了整数,更正式地称为 integers。可是,正如你所知,并不是每个数字都是整数。

作为一个比如,考虑以下状况:

22 / 7

你或许会惊讶地发现,这样做的成果是数字 3。这是由于,假如你在表达式中只运用整数,Swift 会把成果变成一个整数。在这种状况下,成果被四舍五入为下一个整数。

你可以经过把它改成下面的办法告知 Swift 运用十进制数字:

22.0 / 7.0

这一次,成果是 3.142857142857143,契合预期。

取余操作

到现在为止,你所看到的四种操作是很简略了解的,由于你在生活中的大部分时刻都在做这些操作。Swift 还有更复杂的操作,你可以运用,全部这些都是规范的数学操作——仅仅不太常见。你现在就来温习一下。

其中第一个是余数运算,也叫模数运算。在除法中,分母进入分子的整数倍,加上一个余数。这个余数正是余数运算的成果。例如,10模3等于1,由于3进入10三次,余数为1。

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

28 % 10

在这种状况下,成果等于8,由于10进入28两次,余数为8。假如你想用十进制数字核算相同的工作,你可以这样做:

(28.0).truncatingRemainder(dividingBy: 10.0)

这个核算办法是用28除以10,然后切断成果,砍掉任何多余的小数,并回来余下的部分。当没有小数时,其成果与%相同。

移位操作

左移和右移操作将一个十进制数的二进制方法,别离向左或向右移位。然后它们回来新的二进制数的十进制方法。

例如,二进制数字14,填充到8位,是00001110。向左移两位的成果是00111000,也便是十进制的56。

下面是这个移位操作过程中发生的一个插图:

Swift 教程 Part1:表达式,变量和常量

填补右边空位的数字变成了0,左面落下的数字则丢失。

向右移位也是如此,但数字会向右移动。

这两种操作的运算符如下:

  • 左移:<<
  • 右移:>>

这些是你看到的第一个包含一个以上字符的运算符。事实上,运算符可以包含任何数量的字符。

下面是一个运用这两种运算符的比如:

1 << 3
32 >> 2

这两个值都等于数字8。

运用移位的一个原因是为了使2的幂的乘法或除法变得简略。请留意,左移1等于乘以2,左移2等于乘以4,以此类推。相同地,右移1与除以2相同,右移2与除以4相同,等等。

在曩昔,代码经常运用这种技巧,由于对 CPU 来说,移位比复杂的乘法和除法运算要简略得多。因而,假如运用移位,代码会更快。可是,如今,CPU 的速度要快得多,编译器乃至可以将乘法和除以2的幂的运算转换为移位。因而,你只会看到移位用于二进制运算,除非你成为一名嵌入式体系程序员,否则你或许不会看到移位运算符。

运算优先级

有许多时分,有必要运用多个运算符来核算一个数值。下面是一个怎么在 Swift 中这样做的比如:

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

留意括号的运用,在 Swift 中,括号有两个效果:让阅览代码的人–包含你自己–清楚你的意思,以及消除歧义。例如,请看下面的比如:

350 / 5 + 2

这等于 72(350除以5,加2)仍是 50(350除以7)?你们中那些在校园有留意的人将会大叫 “72!” 你会是对的!

Swift 运用相同的推理,并经过所谓的运算符优先级来完成这一点。除法运算符(/)的优先级高于加法运算符(+),所以,在这个比如中,代码首要履行除法运算。

假如你想让 Swift 先做加法运算——也便是回来 50——那么你可以像这样运用括号:

350 / (5 + 2)

优先级规矩与你在校园数学课上学到的相同。乘法和除法有相同的优先级,高于加法和减法,后者也有相同的优先级。

数学函数

Swift 也有许多的数学函数供你在必要时运用。你永久不知道什么时分需求拿出一些三角函数,特别是当你是一个专业的 Swifter 和需求编写那些复杂的游戏时。

留意:并非全部这些功用都是 Swift 的一部分。有些是由操作体系(OS)供给的。不要删去作为 playground 模板一部分的 import 句子,否则 Xcode 会告知你它找不到这些函数。

例如,考虑以下状况:

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

它们别离核算正弦和余弦。请留意,这两种办法都运用了 Double.pi,这是一个常数,Swift 为你供给了现成的 ,并以核算机或许到达的精度核算。很好!

然后是这个:

(2.0).squareRoot() // Same as sqrt(2)
// 1.414213562373095

你知道sin(45)等于2的平方根吗?

另一个常见的操作是寻找两个变量的最大值。你可以像这样运用它们:

max(5, 10)
// 10
min(-5, -10)
// -10

这些函数别离核算两个数字的最大值和最小值。

假如你特别喜爱冒险,你乃至可以这样组合这些函数:

max(sqrt(2), Double.pi / 2)
// 1.570796326794897

命名数据

在最简略的状况下,核算机编程都是关于操作数据的。记住,你在屏幕上看到的全部都可以简化为你发送给 CPU 的数字。有时,你自己以各种类型的数字来表明和处理这些数据;其他时分,数据以更复杂的方法出现,如文本、图像和调集。

在你的 Swift 代码中,你可以给每一块数据起一个姓名,以便你今后引用它。这个姓名带有一个相关的类型,表明这个姓名所指的是哪种数据,比如文本、数字或日期。

接下来你会了解一些根本类型,在本系列的其余部分你还会遇到许多其他类型。

常量

看看这个:

let number: Int = 10

这儿声明晰一个名为 number 的常量,它的类型是 Int。然后,它将该常量的值设置为数字 10。

注:回想一下运算符,这儿还有一个等号 =,被称为赋值运算符。

Int 类型可以存储整数。存储小数的办法是这样的:

let pi: Double = 3.14159

这与 Int 常量相似,仅仅名称和类型不同。这一次,常数是 Double 类型,一种可以存储高精度小数的类型。

还有一种叫 Float 的类型,是浮点的简称,它存储小数的精度比 Double 低。事实上,Double 的精度大约是 Float 的两倍,这便是为什么它首要被称为 DoubleFloat 占用的内存比 Double 少,但一般来说,数字的内存运用不是一个大问题,你会看到 Double 在大多数地方运用。

一旦你声明晰一个常量,你就不能改动它的数据。例如,考虑下面的代码:

let number: Int = 10
number = 0

这段代码产生了一个过错:

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

在 Xcode 中,你会看到过错是这样的:

Swift 教程 Part1:表达式,变量和常量

常量关于那些不会改动的数值是很有用的。例如,假如你在为一架飞机建模,需求盯梢可用座位的总数,你可以运用一个常数。

你乃至可以用一个常数来表明像一个人的年纪的东西。虽然他们的年纪会随着每个生日而变化,但你或许只关怀他们在这个特定时刻的年纪。

变量

一般,你想改动一个姓名背面的数据。例如,假如你要记载你的银行账户的存款和提款余额,你或许会运用一个变量而不是一个常量。

假如你的程序的数据从来没有改动过,那么这将是一个相当枯燥的程序!可是,正如你所看到的,你可以运用一个变量,而不是一个常量。可是,正如你所看到的,不或许改动一个常量背面的数据。

当你知道你需求改动一些数据时,你应该用一个变量来表明这些数据,而不是用一个常量。你以相似的办法声明一个变量,像这样:

var variableNumber: Int = 42

只需句子的第一部分是不同的:你用 let 声明常量,用 var 声明变量。

一旦你声明晰一个变量,你就可以自由地把它改成任何你想要的东西,只需类型坚持不变。例如,要改动上面声明的变量,你可以这样做:

variableNumber = 0
variableNumber = 1_000_000

要改动一个变量,你只需给它分配一个新的值。

留意:在 Swift 中,你可以挑选运用下划线来使较大的数字更简略被人阅览。下划线的数量和位置由你决定。

这是个好时机,可以仔细看看 playground 的成果侧栏。当你把上面的代码输入 playground 时,你会看到右边的成果侧栏在每一行都显现 variableNumber 的当时值:

Swift 教程 Part1:表达式,变量和常量

成果侧栏将显现每一行的相关成果(假如存在)。在变量或常量的状况下,成果将是新的值,不管你是刚刚声明晰一个常量,仍是声明或从头赋值了一个变量。

运用有意义的姓名

总是尝试为你的变量和常量挑选有意义的姓名。好的姓名,就像好的注释,可以使你的代码更简略阅览。

一个好的姓名可以具体描述该变量或常量所代表的内容。下面是一些好姓名的比如。

  • personAge
  • NumberOfPeople
  • GradePointAverage

一般状况下,一个欠好的姓名仅仅没有足够的描述性。下面是一些坏姓名的比如:

  • a
  • temp
  • average

关键是要确保当你今后再读到这个变量或常量时,你能了解它指的是什么。不要过错地认为你有无懈可击的记忆力!在核算机编程中,回顾自己的代码是很常见的。在核算机编程中,早在一两天后回过头来看自己的代码时,就现已忘记了它的效果,这种状况很常见。给你的变量和常量起一个直观、准确的姓名,让你自己更简略了解。

另外,留意上面的姓名是怎么写的。在 Swift 中,常见的是驼峰法的命名办法,下面会解说。关于变量和常量,请遵循这些规矩来正确处理姓名的巨细写

  • 以小写字母开端。
  • 假如姓名是由多个词组成的,就把它们连在一起,并以大写字母开端每个后续的词。
  • 假如这些词中有一个是缩写,就把整个缩写的巨细写在一起(例如,sourceURL和urlDescription)。

在 Swift 中,你乃至可以运用全部的 Unicode 字符。例如,你可以这样声明一个变量:

var : Int = -1

这或许会让你发笑,但关于像这样的特殊字符要慎重运用。它们更难输入,因而,最终或许会给你带来更多的痛苦而不是趣味。

Swift 教程 Part1:表达式,变量和常量

像这样的特殊字符在你存储的数据中或许更有意义,而不是在 Swift 代码中。

递加与递减

你需求的一个常见操作是可以增加或减少一个变量。在 Swift 中,这是这样完成的:

var counter: Int = 0
counter += 1
// counter = 1
counter -= 1
// counter = 0

计数器变量开端时为0,增量将其值设为1,然后减量将其值设回0。

这些运算符与赋值运算符(=)相似,仅仅它们也进行加减运算。它们获取变量的当时值,加上或减去给定的值,然后将成果分配给变量。

换句话说,上面的代码是以下内容的速记:

var counter: Int = 0
counter = counter + 1
// counter = 1
counter = counter - 1
// counter = 0

相同,*=/= 运算符别离对乘法和除法做等价处理:

var counter: Int = 10
counter *= 3 // Same as counter = counter * 3
// counter = 30
counter /= 2 // Same as counter = counter / 2
// counter = 15

何去何从?

你可以运用本教程顶部或底部的下载资料按钮下载最终的 playground。为了进步你的 Swift 技能,你会发现一些小练习要完结。假如你被卡住了,或许你需求一些协助,可以随时利用配套的解决方案。

在本教程中,你只处理了数字–包含整数和小数。当然,代码的世界里还有更多的东西! 在本系列的下一部分中,你将学习更多的类型,如字符串,它答应你存储文本。

本系列教程的下一部分触及类型和操作;持续阅览第二部分:类型和操作,持续你的 Swift 冒险之旅。

假如有任何问题或定见,请在下面的评论中告知咱们!

本教程摘自《Swift Apprentice》第四版第1章和第2章,可在 raywenderlich.com 商店购买。

请看一下,并让咱们知道你的主意!