既然类比结构体强大这么多,为什么还要使用结构体?正是因为它的使用范围受限,使得结构体在构建代码块 (blocks) 的时候非常灵活。
值类型和引用类型
结构体是值类型的,而类是引用类型的,这一行为上的细微区别造就了架构上的无限可能。
值类型的实例,不管是在赋值或是作为函数参数的时候,都是被复制的。数字,字符串,数组,字典,枚举,元组和结构体都是值类型。比如:
var a = "Hello"
var b = a
b.extend(", world")
println("a: \(a); b: \(b)") // a: Hello; b: Hello, world
引用类型的实例 (主要是类) 可以有多个所有者。将一个引用赋值给一个新的变量或者传递给一个函数的时候,它们都指向同一个实例。这是你熟悉的对象的行为。比如:
var a = UIView()
var b = a
b.alpha = 0.5
println("a: \(a.alpha); b: \(b.alpha)") // a: 0.5; b: 0.5