基础部分
基本数据类型
Swift 包含C和OC 上的所有基础数据类型 Int Double Float Bool String
还提供了3个基本集合类型 Array Set Dictionary
字符串和字符
1 | var variableString = "Horse" |
字符串插值 (String Interpolation)
1 | let multiplier = 3 |
字符串索引
每一个
String
值都有一个关联的索引(index)类型,String.Index
,它对应着字符串中的每一个Character
的位置。
不同的字符可能会占用不同数量的内存空间,所以要知道Character的确定位置,就必须从String开头遍历每一个 Unicode 标量直到结尾。因此,Swift 的字符串不能用整数(integer)做索引。
1 | let greeting = "Guten Tag!" |
高阶数据类型 元组
定义
元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
let people = ("xiaoMing", 22)
1 | func doSomeMightCauseError() -> (Bool, NSError?) { |
常量、变量
常量声明 let max = 10
变量声明 var variable = 10
类型标注 var welcomeMessage: String
类型安全和类型推断
由于 Swift 是类型安全的,所以它会在编译你的代码时进行类型检查(type checks),并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误
let a = 100
a
被推断为Int
可选类型 (optionals)
使用可选类型(optionals)来处理值可能缺失的情况。
有值等于
X
或者没有值等于nil
var optionalVar: String? = "123"
关于nil
Swift 的
nil
和 Objective-C 中的nil
并不一样。在 Objective-C 中,nil
是一个指向不存在对象的指针。在 Swift 中,nil
不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选状态都可以被设置为nil
,不只是对象类型。
强制解析
使用
if
语句和nil
比较来判断一个可选值是否包含值。
当确定可选类型确实包含值之后,在变量名后加一个
!
来获取值。表示确定这个可选值有值。
使用
!
来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil
的值。
1 | if optionalVar != nil { |
可选绑定
使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。
1 | if let a = optionalVar { |
隐式解析可选类型
有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型_总会_有值。在这种情况下,每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值。
1 | //可选类型`String` |