基础内容
Swift 是一门全新的用于开发 iOS, OS X 以及 watchOS 应用的编程语言。不过,如果你有 C 或者Objective-C 语言开发经验的话,Swift 的许多地方都会让你感到熟悉。
Swift 为所有 C 和 Objective-C 的类型提供了自己的版本,包括整型值的 Int ,浮点数值的 Double 和 Float ,布尔量值的 Bool ,字符串值的 String 。如同集合类型中描述的那样, Swift 同样也为三个主要的集合类型提供了更高效的版本, Array , Set 和 Dictionary 。
和 C 一样,Swift 用变量存储和调用值,通过变量名来做区分。Swift 中也大量采用了值不可变的变量。它们就是所谓的常量,但是它们比 C 中的常量更加给力。当你所处理的值不需要更改时,使用常量会让你的代码更加安全、简洁地表达你的意图。
除了我们熟悉的类型以外,Swift 还增加了 Objective-C 中没有的类型,比如元组。元组允许你来创建和传递一组数据。你可以利用元组在一个函数中以单个复合值的形式返回多个值。
Swift 还增加了可选项,用来处理没有值的情况。可选项意味着要么“这里有一个值,它等于 x”要么“这里根本没有值”。可选项类似于 Objective-C 中的 nil 指针,但是不只是类,可选项也可以用在所有的类型上。可选项比 Objective-C 中的 nil 指针更安全、更易读,他也是 Swift 语言中许多重要功能的核心。
可选项充分证明了 Swift 是一门类型安全的语言。Swift 帮助你明确代码可以操作值的类型。如果你的一段代码预期得到一个 String ,类型会安全地阻止你不小心传入 Int 。在开发过程中,这个限制能帮助你在开发过程中更早地发现并修复错误。
常量和变量
常量和变量把名字(例如 maximumNumberOfLoginAttempts 或者 welcomeMessage )和一个特定类型的值(例如数字 10 或者字符串 “Hello”)关联起来。常量的值一旦设置好便不能再被更改,然而变量可以在将来被设置为不同的值。
声明常量和变量
常量和变量必须在使用前被声明,使用关键字 let 来声明常量,使用关键字 var 来声明变量。这里有一个如何利用常量和变量记录用户登录次数的栗子:
let maximumNumberOfLoginAttempts = 10 var currentLoginAttempt = 0
这段代码可以读作:
“声明一个叫做 maximumNumberOfLoginAttempts 的新常量,并设置值为 10 。然后声明一个叫做 currentLoginAttempt 的新变量, 并且给他一个初始值 0。”
在这个栗子中,登录次数允许的最大值被声明为一个常量,因为最大值永远不会更改。当前尝试登录的次数被声明为一个变量,因为这个值在每次登录尝试失败之后会递增。
你可以在一行中声明多个变量或常量,用逗号分隔:
var x = 0.0, y = 0.0, z = 0.0
注意
在你的代码中,如果存储的值不会改变,请用 let 关键字将之声明为一个常量。只有储存会改变的值时才使用变量。
类型标注
你可以在声明一个变量或常量的时候提供类型标注,来明确变量或常量能够储存值的类型。添加类型标注的方法是在变量或常量的名字后边加一个冒号,再跟一个空格,最后加上要使用的类型名称。
下面这个栗子给一个叫做 welcomeMessage 的变量添加了类型标注,明确这个变量可以存储 String 类型的值。
var welcomeMessage: String
声明中的冒号的意思是“是…类型”,所以上面的代码可以读作:
“声明一个叫做 welcomMessage 的变量,他的类型是 String ”
我们说“类型是 String ”就意味着“可以存储任何 String 值”。也可以理解为“这类东西”(或者“这种东西”)可以被存储进去。
现在这个 welcomeMessage 变量就可以被设置到任何字符串中而不会报错了:
welcomeMessage = "Hello"
你可以在一行中定义多个相关的变量为相同的类型,用逗号分隔,只要在最后的变量名字后边加上类型标注。
var red, green, blue: Double
注意
实际上,你并不需要经常使用类型标注。如果你在定义一个常量或者变量的时候就给他设定一个初始值,那么 Swift 就像类型安全和类型推断中描述的那样,几乎都可以推断出这个常量或变量的类型。在上面 welcomeMessage 的栗子中,没有提供初始值,所以 welcomeMessage 这个变量使用了类型标注来明确它的类型而不是通过初始值的类型推断出来的。
命名常量和变量
常量和变量的名字几乎可以使用任何字符,甚至包括 Unicode 字符: