欢迎关注微信公众号「Swift 花园」
变量
当你启动 Xcode 时,它会询问你想要做的事情,选择 “Get Started with a Playground” 。 Playground 是一个可以供你输入 Swift 代码并立即看到结果的沙盒环境。
默认的, Xcode 将提供一个 iOS 编程环境的空白 Playground, 点击 Next,然后再点击 Create ,将 Playground 保存到你的系统桌面。
在本文中,我将向你介绍 “变量”,它们是你用来存储程序数据的地方。之所以被称为 “变量”,是因为它们可变,即你可以自由地改变它们的值。
我们将从在 Playground 中的第一行代码开始了解 “变量”,它是一行创建了一个名称为 “str” , 值为 “Hello, playground” 的字符串变量的代码。
1 | var str = "Hello, playground" |
这行代码创建了一个名为 str
的新变量,并给它赋值为 “Hello, playground” 。在 Playground 右侧的输出区域你可以看到 “Hello, playground” – 这是 Xcode 在展示我们刚刚给 str
设置的值。
既然 str 是一个变量,我们就可以改变它:
1 | str = "Goodbye" |
第二次的时候,你不需要再写一次 var
,因为这个变量在前面已经被创建过了 – 我们只需要改变它。
字符串和整型
Swift 是一门类型安全的编程语言,类型安全特指的含义包括:每一个变量都必须有一个特定的 “类型”。 Xcode 为我们创建的 str 变量拥有一个由字母组合 “Hello, playground” 组成的字符串,所以 Swift 为这个变量赋予了 String
类型。
换句话说,如果我们想存储一个人的年龄,那我们可能需要创建这样一个变量:
1 | var age = 38 |
这个变量拥有一个整数, 所以 Swift 赋予它 Int
类型 – Int
是 “integer” 的简写。如果你的数比较大,Swift 允许使用下划线作为千位分隔符。这些分隔符不会改变数字代表的绝对数值,它们只是让数字阅读起来更方便。
例如:
1 | var population = 8_000_000 |
String
和 Int
是不同的类型,不能混用。因此,你可以把 str
的值改成 “Goodbye”,但你不能把它改成 38
,因为 38
是一个 Int
类型,不是一个 String
类型。
多行字符串
标准的 Swift 字符串使用双引号表示,但在双引号之间你不能换行。如果你想要表示多行的字符串,需要使用将双引号首尾的引号个数由一个改成三个,就像下面这样:
1 | var str1 = """ |
Swift 对于书写这些引号有着特别的规定:开始的三个引号和结束的三个引号都必须独占一行,但它们占的那两行都不会算进最终的字符串里。假如你只是想利用多行字符串来使代码看起来更整洁,你可以通过在每行的行尾添加一个 \ 来确保换行不会进入最终的字符串,就像这样:
1 | var str2 = """ |
双精度浮点型和布尔型
Swift 中还有两种基础的数据类型,它们是双精度浮点数类型和布尔类型,你将会经常用到它们。 Double
被用来代表 “双精度浮点数”,这是表示诸如 38.1 , 或者 3.141592654 这样的小数的一种高级的说法。每当你通过一个分数创建一个变量时, Swift 都会自动赋予这个变量 Double
类型。
举个例子:
1 | var pi = 3.141 |
双精度浮点数有别于整数,也不能混用。至于布尔类型则更简单一些:它们只有 true
和 false
两种值,所以当你用 true
或者 false
创建一个变量时, Swift 会自动赋予这个变量布尔类型。
举个例子:
1 | var awesome = true |
字符串插值
你已经在前面学到了如何在代码中直接输入字符串的值,不过 Swift 还提供了一种被称为 “字符串插值” 的特性。这个特性允许你在字符串值里插入变量,从而动态地给一个 String
类型的变量赋值。在字符串内部,你可以放置任意类型,任意数量的变量。要放置这些变量,你需要以一个反斜杠开始,即 \,然后跟上用圆括号包起来的变量名。
举个例子:
1 | var score = 85 |
你将会在 Playground 的输出区域里看到,上面的操作会把 str
变量的值设置为 “你的分数是 85”。
多尝试几次,通过字符串插值组合出任何你想要的字符串。
1 | var results = " 测试结果如下: \(str)" |
在之后你还会学到,字符串插值不仅可以用来放置变量,还可以用来运行代码。
常量
前面提到变量之所以被称为变量是因为你可以随着时间的推移改变它们,这一点非常有用。不过,有些时候你只需要设置一次值然后就不再改变了,这种情况下我们使用常量。对应给变量用的 var
关键字,常量用 let
关键字表示。 let
关键字用来声明常量,常量的值只能被设置一次,并且无法被修改。
举个例子:
1 | let taylor = "swift" |
如果你尝试改变常量的值, Xcode 会拒绝运行你的代码。这是一种安全机制,以防止你失手改变一些本来不应该被改变的东西。在书写 Swift 代码的时候,除非你明确想要改变,你应当尽量使用 let
关键字。实际上,如果你用了 var
声明变量但之后都没有再对它进行改变, Xcode 将会发出警告。
类型注解
Swift 基于变量和常量在创建时被赋予的值为它们分配了一个类型。因此,当你书写如下的代码时, Swift 知道这里面包含了一个字符串:
1 | let str = "Hello, playground" |
它将把 str
当作一个 String
类型,因此之后你就不能再给它赋值一个整数值或者布尔值。这个过程被称为 类型推断 。 Swift 能够基于你创建一个东西的方式来推断它的类型。 如果你想显式地声明数据的类型而不是依赖 Swift 的类型推断,你可以这么写:
1 | let album: String = "Reputation" |
留心布尔类型的缩写名是 Bool
,同样地,整数类型也是采用缩写的 Int
。
总结
让我们来总结一下。
- 我们使用
var
来创建变量,使用let
来创建常量。如无必要使用变量,应当尽可能地使用常量。 String
类型通常以双引号来开始和结束。如果你想要字符串能够跨越多行,则需要把引号替换为三个。Int
类型存储整数,Double
存储小数,而Bool
则存储true
或者false
。- 字符串插值允许你通过在字符串内部放置其他的变量和常量的方式来创建新的字符串。
- Swift 通过类型推断来给变量或者常量分配类型,不过你也可以显式地提供类型。