1、值永遠不會被隱式轉換爲其他類型。如果你需要把一個值轉換成其他類型,請顯式轉換。
let label = "The width is"
let width = 94
let widthLabel = label + String(width) <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
刪除最後一行中的 String,錯誤提示:
Could not find an overload for '+' that accepts the supplied arguments
2、switch 支持任意類型的數據以及各種比較操作——不僅僅是整數以及測試相等。
let vegetable = "red pepper"
switch vegetable {
case "celery":
let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress":
let vegetableComment = "That would make a good tea sandwich."
case let x where x.hasSuffix("pepper"):
let vegetableComment = "Is it a spicy \(x)?"
default:
let vegetableComment = "Everything tastes good in soup."
}
刪除 default 語句,報錯 Switch must be exhaustive, consider adding a default clause
運行 switch 中匹配到的子句之後,程序會退出 switch 語句,並不會繼續向下運行,所以不需要在每個子句結尾寫 break。
3、
常量和變量的命名
你可以用任何你喜歡的字符作爲常量和變量名,包括 Unicode 字符:
- let π = 3.14159
- let 你好 = "你好世界"
- let ???????? = "dogcow"
常量與變量名不能包含數學符號,箭頭,保留的(或者非法的)Unicode 碼位,連線與製表符。也不能以數字開頭,但是可以在常量與變量名的其他地方包含數字。
4、
輸出常量和變量
你可以用println函數來輸出當前常量或變量的值:
- println(friendlyWelcome)
- // 輸出 "Bonjour!"
println是一個用來輸出的全局函數,輸出的內容會在最後換行。如果你用 Xcode,println將會輸出內容到“console”面板上。(另一種函數叫print,唯一區別是在輸出內容最後不會換行。)
5、
數值型字面量
整數字面量可以被寫作:
- 一個十進制數,沒有前綴
- 一個二進制數,前綴是0b
- 一個八進制數,前綴是0o
- 一個十六進制數,前綴是0x
下面的所有整數字面量的十進制值都是17:
- let decimalInteger = 17
- let binaryInteger = 0b10001 // 二進制的17
- let octalInteger = 0o21 // 八進制的17
- let hexadecimalInteger = 0x11 // 十六進制的17
浮點字面量可以是十進制(沒有前綴)或者是十六進制(前綴是0x)。小數點兩邊必須有至少一個十進制數字(或者是十六進制的數字)。浮點字面量還有一個可選的指數(exponent),在十進制浮點數中通過大寫或者小寫的e來指定,在十六進制浮點數中通過大寫或者小寫的p來指定。
如果一個十進制數的指數爲exp,那這個數相當於基數和$10^{exp}$的乘積:
1.25e2 表示 $1.25 × 10^{2}$,等於 125.0。
1.25e-2 表示 $1.25 × 10^{-2}$,等於 0.0125。
如果一個十六進制數的指數爲exp,那這個數相當於基數和$2^{exp}$的乘積:
0xFp2 表示 $15 × 2^{2}$,等於 60.0。
0xFp-2 表示 $15 × 2^{-2}$,等於 3.75。
6、
可選
使用可選(optionals)來處理值可能缺失的情況。可選表示:
-有值,等於 x
或者
沒有值
注意:C 和 Objective-C 中並沒有可選這個概念。最接近的是 Objective-C 中的一個特性,一個方法要不返回一個對象要不返回nil,nil表示“缺少一個合法的對象”。然而,這隻對對象起作用——對於結構體,基本的 C 類型或者枚舉類型不起作用。對於這些類型,Objective-C 方法一般會返回一個特殊值(比如NSNotFound)來暗示值缺失。這種方法假設方法的調用者知道並記得對特殊值進行判斷。然而,Swift 的可選可以讓你暗示任意類型的值缺失,並不需要一個特殊值。
來看一個例子。Swift 的String類型有一個叫做toInt的方法,作用是將一個String值轉換成一個Int值。然而,並不是所有的字符串都可以轉換成一個整數。字符串"123"可以被轉換成數字123,但是字符串"hello, world"不行。
下面的例子使用toInt方法來嘗試將一個String轉換成Int:
- let possibleNumber = "123"
- let convertedNumber = possibleNumber.toInt()
- // convertedNumber 被推測爲類型 "Int?", 或者類型 "optional Int"
因爲toInt方法可能會失敗,所以它返回一個可選的(optional)Int,而不是一個Int。一個可選的Int被寫作Int?而不是Int。問號暗示包含的值是可選,也就是說可能包含Int值也可能不包含值。(不能包含其他任何值比如Bool值或者String值。只能是Int或者什麼都沒有。)
7、不像C語言,Swift 允許多個case匹配同一個值。但是,如果存在多個匹配,那麼只會執行第一個被匹配到的case塊。