讀古今文學網 > iOS編程基礎:Swift、Xcode和Cocoa入門指南 > 1.4 變量 >

1.4 變量

變量指的是對象的名字。從技術角度來說,它指向一個對像;它是一個對像引用。從非技術角度來看,你可以將其看作存放對象的一個盒子。對象可能會發生變化,或是盒子中的對象被其他對像所替換,但名字卻不會發生變化。

在Swift中,不存在沒有名字的變量,所有變量都必須要聲明。如果需要為某個東西起個名字,那麼你要說「我在創建一個名字」。可以通過兩個關鍵字實現這一點:let或是var。在Swift中,聲明通常會伴隨著初始化一起——使用等號為變量賦值,並作為聲明的一部分。下面這些都是變量聲明(與初始化):


let one = 1
var two = 2  

如果名字存在,那麼你就可以使用它了。比如,我們可以將two中的值修改為one中的:


let one = 1
var two = 2
two = one  

上面最後一行代碼使用了前兩行所聲明的名字one與two:等號右側的名字one僅僅用於引用盒子中的值(即1);不過,等號左側的名字two則用於替換掉盒子中的值。這種語句(變量名位於等號左側)叫作賦值,等號叫作賦值運算符。等號並不是相等性斷言,這與數學公式中的等號不同;它是一個命令,表示「獲取右側的值,然後使用它替換掉左側的值」。

變量的這兩種聲明方式是不同的,通過let聲明的名字是不能替換掉其對象的。通過let聲明的變量是個常量;其值只能被賦予一次並且不再變化。如下代碼是無法編譯通過的:


let one = 1
var two = 2
one = two // compile error  

可以通過var聲明一個名字來實現最大的靈活性,不過如果知道永遠不會改變變量的初始值,那麼最好使用let,這樣Swift在處理時效率會更高;事實上,如果本可以使用let,但你卻使用了var,那麼Swift編譯器就會提示你,並且可以幫你修改。

變量也是有類型的,其類型是在變量聲明時創建的,而且永遠不會改變。比如,如下代碼是無法編譯通過的:


var two = 2
two = "hello" // compile error  

一旦聲明two並將其初始化為2,那麼它就是一個數字了(確切地說是一個Int),而且一直都將如此。你可以將其替換為1,因為1也是個Int,但不能將其值替換為「hello」,因為"hello"是個字符串(確切地說是一個String),而String並非Int。

變量有自己的生命——更準確地說是有自己的生命週期。只要變量存在,那麼它就會一直保存其值。這樣,變量不僅是一種便於命名的手段,還是一種保存值的方式。稍後將會對此做詳細介紹。

根據約定,如String或Int(或Dog、Cat)等類型名要以大寫字母開頭;變量名則以小寫字母開頭,請不要違背該約定。如果違背了,那麼你的代碼雖然還是可以編譯通過並正常運行,但其他人卻不太容易理解。