常量和變量
常量的值一旦設(shè)定就不能改變尚困,而變量的值可以隨意更改。
常量和變量必須在使用前聲明链蕊,用 let
來聲明常量事甜,用 var
來聲明變量谬泌。
let a = 1
var b = 2
你可以在一行中聲明多個常量或者多個變量,用逗號隔開:
var a = 1, b = "s" // 注意語法規(guī)范 少空格時會報錯
常量和變量的命名
你可以用任何你喜歡的字符作為常量和變量名:
let π = 3.14159
let 你好 = "你好世界"
let ???? = "dogcow"
常量與變量名不能包含數(shù)學(xué)符號逻谦,箭頭掌实,保留的(或者非法的)Unicode 碼位,連線與制表符跨跨。也不能以數(shù)字開頭潮峦,但是可以在常量與變量名的其他地方包含數(shù)字。
一旦你將常量或者變量聲明為確定的類型勇婴,你就不能使用相同的名字再次進(jìn)行聲明忱嘹,或者改變其存儲的值的類型。同時耕渴,你也不能將常量與變量進(jìn)行互轉(zhuǎn)拘悦。
注意:
如果你需要使用與Swift保留關(guān)鍵字相同的名稱作為常量或者變量名,你可以使用反引號(`)將關(guān)鍵字包圍的方式將其作為名字使用橱脸。無論如何础米,你應(yīng)當(dāng)避免使用關(guān)鍵字作為常量或變量名,除非你別無選擇添诉。
let `let` = "a"
注釋
與 C 語言多行注釋不同屁桑,Swift 的多行注釋可以嵌套在其它的多行注釋之中。你可以先生成一個多行注釋塊栏赴,然后在這個注釋塊之中再嵌套成第二個多行注釋蘑斧。終止注釋時先插入第二個注釋塊的終止標(biāo)記,然后再插入第一個注釋塊的終止標(biāo)記:
/* 這是第一個多行注釋的開頭
/* 這是第二個被嵌套的多行注釋 */
這是第一個多行注釋的結(jié)尾 */
通過運(yùn)用嵌套多行注釋须眷,你可以快速方便的注釋掉一大段代碼竖瘾,即使這段代碼之中已經(jīng)含有了多行注釋塊。
分號
與其他大部分編程語言不同花颗,Swift 并不強(qiáng)制要求你在每條語句的結(jié)尾處使用分號(;
)捕传,當(dāng)然,你也可以按照你自己的習(xí)慣添加分號扩劝。有一種情況下必須要用分號庸论,即你打算在同一行內(nèi)寫多條獨立的語句:
let cat = "??"; print(cat)
// 輸出 "??"
類型標(biāo)注
當(dāng)你聲明常量或者變量的時候可以加上類型標(biāo)注(type annotation),說明常量或者變量中要存儲的值的類型棒呛。如果要添加類型標(biāo)注葡公,需要在常量或者變量名后面加上一個冒號和空格,然后加上類型名稱条霜。
這個例子給 welcomeMessage
變量添加了類型標(biāo)注催什,表示這個變量可以存儲 String
類型的值:
var welcomeMessage: String //聲明一個類型為 String ,名字為 welcomeMessage 的變量。
你可以在一行中定義多個同樣類型的變量蒲凶,用逗號分割气筋,并在最后一個變量名之后添加類型標(biāo)注:
var red, green, blue: Double
注意:
一般來說你很少需要寫類型標(biāo)注。如果你在聲明常量或者變量的時候賦了一個初始值旋圆,Swift可以推斷出這個常量或者變量的類型宠默。
類型推斷
Swift 是一個類型安全(type safe)的語言。類型安全的語言可以讓你清楚地知道代碼要處理的值的類型灵巧。如果你的代碼需要一個String
搀矫,你絕對不可能不小心傳進(jìn)去一個Int
。
由于 Swift 是類型安全的刻肄,所以它會在編譯你的代碼時進(jìn)行類型檢查(type checks)瓤球,并把不匹配的類型標(biāo)記為錯誤。這可以讓你在開發(fā)的時候盡早發(fā)現(xiàn)并修復(fù)錯誤敏弃。
當(dāng)你要處理不同類型的值時卦羡,類型檢查可以幫你避免錯誤。然而麦到,這并不是說你每次聲明常量和變量的時候都需要顯式指定類型绿饵。如果你沒有顯式指定類型,Swift 會使用類型推斷(type inference)來選擇合適的類型瓶颠。有了類型推斷拟赊,編譯器可以在編譯代碼的時候自動推斷出表達(dá)式的類型。原理很簡單粹淋,只要檢查你賦的值即可吸祟。
因為有類型推斷,和 C 或者 Objective-C 比起來 Swift 很少需要聲明類型廓啊。常量和變量雖然需要明確類型欢搜,但是大部分工作并不需要你自己來完成封豪。
當(dāng)你聲明常量或者變量并賦初值的時候類型推斷非常有用谴轮。當(dāng)你在聲明常量或者變量的時候賦給它們一個字面量(literal value 或 literal)即可觸發(fā)類型推斷。(字面量就是會直接出現(xiàn)在你代碼中的值吹埠,比如 42
和 3.14159
第步。)
let meaningOfLife = 42 // meaningOfLife 會被推測為 Int 類型
let pi = 3.14159 // pi 會被推測為 Double 類型
let anotherPi = 3 + 0.14159 // anotherPi 會被推測為 Double 類型
注意:
Double
精確度很高,至少有15位數(shù)字缘琅,而Float
只有6位數(shù)字粘都。選擇哪個類型取決于你的代碼需要處理的值的范圍,在兩種類型都匹配的情況下刷袍,將優(yōu)先選擇Double
翩隧。
Swift 廣泛使用類型推斷,從而允許你省略代碼中很多變量和表達(dá)式的類型或部分類型呻纹。比如堆生,對于 var x: Int = 0
专缠,你可以完全省略類型而簡寫成 var x = 0
,編譯器會正確推斷出 x
的類型 Int
淑仆。類似的涝婉,當(dāng)完整的類型可以從上下文推斷出來時,你也可以省略類型的一部分蔗怠。比如墩弯,如果你寫了 let dict: Dictionary = ["A" : 1]
,編譯器能推斷出 dict
的類型是 Dictionary
寞射。
注意:
Swift看起來是一個弱類型的語言渔工,但實際上是一個強(qiáng)類型的語言。
數(shù)值型字面量
數(shù)值類字面量可以包括額外的格式來增強(qiáng)可讀性怠惶。整數(shù)和浮點數(shù)都可以添加額外的零并且包含下劃線涨缚,并不會影響字面量:
let paddedDouble = 000123.456 //print: 123.456
let oneMillion = 1_000_000 //print: 1000000
let justOverOneMillion = 1_000_000.000_000_1 //print: 1000000.0000001
參考文檔:http://www.swift51.com/swift3.0/chapter2/01_The_Basics.html#constants_and_variables