既然類比結構體強大這么多,為什么還要使用結構體?正是因為它的使用范圍受限,使得結構體在構建代碼塊 (blocks) 的時候非常靈活。
值類型和引用類型
結構體是值類型的,而類是引用類型的,這一行為上的細微區(qū)別造就了架構上的無限可能。
值類型的實例,不管是在賦值或是作為函數參數的時候,都是被復制的。數字,字符串,數組,字典,枚舉,元組和結構體都是值類型。比如:
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