基本语法

符号概念

引入

Swift 中的引入关键字是 import

值得注意的是,这个语句可以用来引入任何 Objective-C/C 的库到 Swift 程序中来。

分号

Swift 不要求在每行语句的结尾使用分号。

但当你在同一行书写多条语句时,必须用分号隔开。

空格

Swift 并不是像 C/C++,Java 那样完全忽视空格,Swift 对空格的使用有一定的要求,但是又不像 Python 对缩进的要求那么严格。

在 Swift 中,运算符不能直接跟在变量或常量的后面。例如下面的代码会报错:

1
2
3
4
5
/// error: prefix/postfix '=' is reserved
let a= 1 + 2

/// error: consecutive statements on a line must be separated by ';'
let a = 1+ 2

第二个报错比较奇怪,这是因为Swift认为到1+这个语句就结束了,2就是下一个语句了。只有这样写才不会报错:

1
2
let a = 1 + 2;  // 编码规范推荐使用这种写法
let b = 3+4 		// 这样也是OK的

数据类型

数据类型基础

内置数据类型:语言中内置了以下的几种数据类型:

  • 整数/无符号整数:Int/Uint;
  • 浮点数:Double/Float;
  • 布尔值:Bool;
  • 字符串/字符:String/Character;
  • 可选类型:Optional。表示有值或没有值的情况;

类型别名:可以用下面的语法定义类型别名:

1
typealias newname = type

类型安全:

  • Swift 是一个类型安全(type safe)的语言。
  • 由于 Swift 是类型安全的,所以它会在编译你的代码时进行类型检查(type checks),并把不匹配的类型标记为错误。

类型推断:

  • 如果你没有显式指定类型,Swift 会使用类型推断(type inference)来选择合适的类型;
  • 通过类型推断声明变量类型的关键词是 letvar

变量声明:

1
2
3
var variableName1 = <initial value>

var variableName2 : <variable type>

可选类型

Optional 的数据类型有以下两种声明方式,是等价的:

1
2
var optionalInteger: Int?
var optionalInteger: Optional<Int>

Optional 是一个含有两种情况的枚举,NoneSome(T),用来表示可能有或可能没有值。

可选类型中的 nil 类型,类似于 Objective-C 中指针的 nil 值,但是 nil 只对类有用,而可选类型对所有的类型都可用,并且更安全。

强制解析:

  • 当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个感叹号表示"我知道这个可选有值,请使用它。"
  • 这被称为可选值的强制解析(forced unwrapping)。

自动解析:

  • 可选变量在声明的时候使用 ! 而不是 ?,这样变量就会自动解析。

下面是一个实例程序以及输出内容:

1
2
3
4
5
6
7
8
var optionalInteger1: Int? = 1024
var optionalInteger2: Int?

print(optionalInteger1)  // Optional(1024)
print(optionalInteger1!) // 1024

print(optionalInteger2)  // nil
print(optionalInteger2!) // Fatal error: Unexpectedly found nil while unwrapping an Optional value

可选绑定:

  • 使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。
  • 可选绑定可以用在 ifwhile 语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。

下面是一个使用可选绑定的例子:

1
2
3
if let constantName = someOptional {
    <statements>
}

常量/变量/字面量

常量用 let 声明,变量用 var 声明。

字面量同 C++,布尔值除了 true/false 还有 nil 作为第三个值。

控制流

运算符

除了 C++ 中已经有的 “算术运算符”、“比较运算符”、“逻辑运算符”、“位运算符”、“赋值运算符” 之外,Swift 中提供了一个特殊的运算符 “区间运算符”。

Swift 提供了两个区间的运算符。

运算符实例
闭区间运算符1…5 区间值为 1, 2, 3, 4 和 5
半开区间运算符(左闭右开)1..< 5 区间值为 1, 2, 3, 和 4

以下为区间运算的简单实例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import Cocoa

print("闭区间运算符:")
for index in 1...5 {
    print("\(index) * 5 = \(index * 5)")
}

print("半开区间运算符:")
for index in 1..<5 {
    print("\(index) * 5 = \(index * 5)")
}

条件语句

if;else;三元运算。

循环语句

除了 for-in/for/while/repeat...while/switch...case 之外。

Swift 针对 switch 提供了一个 fallthrough 关键词作为优化:

  • Swift 的 switch 语句中的一个 case 执行完之后,默认会结束语句块;
  • 若想要继续执行下面的 case,需要用 fallthrough 语句继续后面的流程;