Logo
Section 1 / 6

理解类型、变量和常量

了解在 Swift 中如何使用数据类型、常量和变量。通过提供的练习亲自尝试一下。

检查点

理解类型、变量和常量

了解在 Swift 中如何使用数据类型、常量和变量。通过提供的练习亲自尝试一下。

理解 Swift 中的数据

当我们观察运行在计算机系统和移动设备上的各种软件时,从金融应用到图形密集型游戏,很容易忘记计算机本质上只是二进制机器。

二进制系统以 1 和 0、真或假、置位或未置位的形式工作。存在于内存中、存储在硬盘驱动器上以及在电路板和总线间流动的所有数据,实际上都只是 1 和 0 的序列。每个 1 或 0 被称为一个 位。位被组合成每组八个的块,每组被称为一个 字节。当人们提到 32 位和 64 位计算机系统时,他们指的是 CPU 总线一次可以处理的位数。例如,一个 64 位的 CPU 可以以 64 位块的形式处理数据,从而比基于 32 位的系统性能更快。

当然,人类并不以二进制方式思考。我们使用十进制数字、字母和单词。为了让人类能够轻松(“轻松”在此语境下是主观的)编程计算机,需要在人类思维与计算机处理之间建立一种中间地带。这正是 Swift 等编程语言发挥作用的地方。编程语言使人类能够以我们理解的方式和结构表达对计算机的指令,然后将其编译为 CPU 可执行的格式。

任何程序的基本要素之一是数据。像 Swift 这样的编程语言定义了一组 数据类型,使我们在编程时能够以我们熟悉的方式来处理数据。例如,如果我们想在 Swift 程序中存储一个数字,可以使用如下语法:

1var mynumber = 10

在上述示例中,我们创建了一个名为 mynumber 的变量,并为其赋值为 10。当我们把源代码编译为 CPU 使用的机器码时,数字 10 在计算机中以二进制形式表示为:

11010

Swift 变量

变量 实际上是计算机内存中用于存储应用程序所用数据的位置。每个变量由程序员赋予一个名称并分配一个值。该变量的名称随后可在 Swift 代码中用于访问该变量所赋的值。这种访问可以是读取变量的值,也可以是更改其值。当然,正是变量能够改变其值的能力,使其得名 变量。

Swift 常量

常量 类似于变量,因为它提供了一个命名的内存位置来存储数据值。常量与变量有一个关键区别:一旦为常量赋值后,就无法再更改它。

常量在程序中反复使用某个固定值时特别有用。与其每次直接使用该值,不如先将值赋给一个常量,然后在代码中引用这个常量,这样会使代码更易读。例如,你在表达式中使用值 5 的原因可能对阅读你 Swift 代码的人来说并不清晰。如果改用名为 interestRate 的常量,该值的用途就会变得非常明确。如果你在程序中多处引用 interestRate,只需修改常量的声明即可,而无需逐个更改每次引用的值。这是常量最大的优势之一。

与变量一样,常量也有类型、名称和值。但与变量不同的是,一旦为常量赋值,该值就无法再被更改。

声明常量和变量

变量使用 var 关键字声明,可以在创建时初始化一个值。如果变量在声明时没有初始值,则必须将其声明为 可选类型(这一主题将在课程后续部分介绍)。以下示例展示了 Swift 变量的用法。代码首先将值 10 赋给名为 userCount 的变量,然后使用 Swift 的 print 语句显示该变量的当前值。接着为变量赋一个新值,并再次打印出新的值。

1var userCount = 10 2 3print(userCount) 4 5userCount = 20 6 7print(userCount)

常量使用 let 关键字声明,如下所示:

1let maxUserCount = 20 2 3print(maxUserCount)

由于 maxUserCount 已被声明为常量,Swift 编译器会在尝试更改其赋值时报告错误:

1let maxUserCount = 20 2 3print(maxUserCount) 4 5maxUserCount = 30 // 无效代码

正如我们稍后将看到的,只有在使用 类型注解 时,才允许在常量声明后为其赋值。

注意:为了提高代码效率和执行性能,Apple 建议尽可能使用常量而不是变量。

类型注解与类型推断

Swift 被归类为一种 类型安全 的编程语言。这意味着一旦变量的数据类型被确定,该变量就不能再存储其他类型的值,否则会引发编译错误。这与某些 松散类型 的编程语言形成对比,在那些语言中,变量一旦声明后,就可以存储不同类型的数据。

常量或变量的类型可以通过两种方式确定。一种方法是在声明时使用 类型注解。这通过在常量或变量名称后加上冒号(:),再紧跟类型声明来实现。例如,下面这行代码声明了一个名为 userCount 的变量,其类型为 Int(整数):

1var userCount: Int = 10

如果没有在声明中使用类型注解,Swift 编译器会使用一种称为 类型推断 的技术来确定常量或变量的类型。在依赖类型推断时,编译器会查看初始化时赋给常量或变量的值的类型,并以此作为其类型。例如,考虑以下变量和常量的声明:

1var signalStrength = 2.231 2let companyName = "My Company"

在编译上述代码行时,Swift 会推断出 signalStrength 变量的类型为 Double(在 Swift 中,所有浮点数默认推断为 Double),而 companyName 常量的类型为 String。

当常量在声明时没有类型注解时,必须在声明时就赋予一个值:

1let bookTitle = "Swift Programming Essentials"

然而,如果在声明常量时使用了类型注解,则可以在代码的后续部分再赋值。例如:

1let courseTitle: String 2 3courseTitle = "Swift Programming Essentials" 4 5print(courseTitle)

本课小结

  • 变量和常量提供了存储值的空间。
  • 变量使用 var 关键字声明。
  • 常量使用 let 关键字声明。
  • 为了更高的代码效率,建议尽可能使用常量而非变量。
  • 变量是可变的(赋值可以更改)。
  • 常量是不可变的(赋值不能更改)。
  • 类型注解是指在声明时指定变量类型。
  • 类型推断让编译器根据赋值的值自动推断数据类型。

测验

测试你对 Swift 类型、变量和常量的知识掌握情况。

练习

通过以下练习将本课所学理论付诸实践。

练习 1

使用类型注解声明一个名为 myString 的 String 类型变量,并将其初始化为值 "Hello Swift"。

练习

1// 请在此处编写代码

答案

1var myString: String = "Hello Swift"

练习 2

声明一个未初始化的整数常量 myInt,然后为其赋值 10。

练习

1// 请在此处编写代码

答案

1let myInt: Int 2 3myInt = 10

练习 3

修正以下代码,使其不再引发编译错误:

练习

1let userCount = 10 2 3userCount = 20

答案

1var userCount = 10 2 3userCount = 20

Quiz

单选题

在 Swift 中,使用哪个关键字来声明变量?

1 / 4

欢迎来到 Swift

数值数据类型