Int
一般來說赐写,你不需要專門指定整數(shù)的長(zhǎng)度。Swift 提供了一個(gè)特殊的整數(shù)類型Int,長(zhǎng)度與當(dāng)前平臺(tái)的原生字長(zhǎng)相同:
- 在32位平臺(tái)上惰说,Int 和 Int32 長(zhǎng)度相同
- 在64位平臺(tái)上舆乔,Int 和 Int64 長(zhǎng)度相同
除非你需要特定長(zhǎng)度的整數(shù)岳服,一般來說使用 Int 就夠了。這可以提高代碼一致性和可復(fù)用性希俩。即使是在32位平臺(tái)上吊宋,Int 可以存儲(chǔ)的整數(shù)范圍也可以達(dá)到 -2,147,483,648 ~ 2,147,483,647 ,大多數(shù)時(shí)候這已經(jīng)足夠大了颜武。
類別名
類型別名(type aliases)就是給現(xiàn)有類型定義另一個(gè)名字璃搜。你可以使用typealias關(guān)鍵字來定義類型別名。
typealias AudioSample = UInt16 // 給UInt16 起個(gè)別名叫AudioSample
定義了一個(gè)類型別名之后鳞上,你可以在任何使用原始名的地方使用別名:
print(maxAmplitudeFound) // 輸出: 0
var a: AudioSample = 0
元祖
元組(tuples)把多個(gè)值組合成一個(gè)復(fù)合值腺劣。元組內(nèi)的值可以是任意類型,并不要求是相同類型因块。
let http404Error = (404, "Not Found")
// http404Error 的類型是 (Int, String)橘原,值是 (404, "Not Found")
你可以將一個(gè)元組的內(nèi)容分解(decompose)成單獨(dú)的常量和變量,然后你就可以正常使用它們了:
let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
// 輸出 "The status code is 404"
print("The status message is \(statusMessage)")
// 輸出 "The status message is Not Found"
此外涡上,你還可以通過下標(biāo)來訪問元組中的單個(gè)元素趾断,下標(biāo)從零開始:
print("The status code is \(http404Error.0)")
// 輸出 "The status code is 404"
print("The status message is \(http404Error.1)")
// 輸出 "The status message is Not Found"
你可以在定義元組的時(shí)候給單個(gè)元素命名:
let http200Status = (statusCode: 200, description: "OK") 給元組中的元素命名后,你可以通過名字來獲取這些元素的值:
print("The status code is \(http200Status.statusCode)")
// 輸出 "The status code is 200"
print("The status message is \(http200Status.description)")
// 輸出 "The status message is OK"
斷言
向這個(gè)函數(shù)傳入一個(gè)結(jié)果為 true 或者 false 的表達(dá)式以及一條信息吩愧,當(dāng)表達(dá)式的結(jié)果為 false 的時(shí)候這條信息會(huì)被顯示:
let age = -3
assert(age >= 0, "A person's age cannot be less than zero") // 因?yàn)?age < 0芋酌,所以斷言會(huì)觸發(fā)
如果不需要斷言信息,可以就像這樣忽略掉:
assert(age >= 0)
空合運(yùn)算符
空合運(yùn)算符(a ?? b)將對(duì)可選類型 a 進(jìn)行空判斷雁佳,如果 a 包含一個(gè)值就進(jìn)行解封脐帝,否則就返回一個(gè)默認(rèn)值 b。表達(dá)式 a 必須是 Optional 類型糖权。默認(rèn)值 b 的類型必須要和 a 存儲(chǔ)值的類型保持一致堵腹。
空合運(yùn)算符是對(duì)以下代碼的簡(jiǎn)短表達(dá)方法:
a != nil ? a! : b
區(qū)間運(yùn)算符
閉區(qū)間運(yùn)算符
閉區(qū)間運(yùn)算符(a...b)定義一個(gè)包含從 a 到 b(包括 a 和 b)的所有值的區(qū)間。a 的值不能超過 b星澳。
for index in 1...5 {
print("\(index) * 5 = \(index * 5)")
}
半開區(qū)間運(yùn)算符
半開區(qū)間運(yùn)算符(a..<b)定義一個(gè)從 a 到 b 但不包括 b 的區(qū)間疚顷。 之所以稱為半開區(qū)間,是因?yàn)樵搮^(qū)間包含第一個(gè)值而不包括最后的值。
for i in 0..<5 {
print("第 \(i + 1) 個(gè)人叫 \(names[i])")
}
單側(cè)區(qū)間
閉區(qū)間操作符有另一個(gè)表達(dá)形式腿堤,可以表達(dá)往一側(cè)無限延伸的區(qū)間 —— 例如阀坏,一個(gè)包含了數(shù)組從索引 2 到結(jié)尾的所有值的區(qū)間。
for name in names[2...] {
print(name)
}
for name in names[...2] {
print(name)
}
for name in names[..<2] {
print(name)
}
數(shù)組
遍歷
用enumerated()方法來進(jìn)行數(shù)組遍歷來獲取索引和值
let array = ["qqq","www","eee"]
for (_, value) in array.enumerated() {
print(value)
}
字典
switch
在 Swift 中笆檀,當(dāng)匹配的 case 分支中的代碼執(zhí)行完畢后忌堂,程序會(huì)終止switch語句,而不會(huì)繼續(xù)執(zhí)行下一個(gè) case 分支酗洒。這也就是說士修,不需要在 case 分支中顯式地使用break語句。
let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a": // 無效寝蹈,這個(gè)分支下面沒有語句
case "A":
print("The letter A")
default:
print("Not the letter A")
}
// 這段代碼會(huì)報(bào)編譯錯(cuò)誤
為了讓單個(gè)case同時(shí)匹配a和A李命,可以將這個(gè)兩個(gè)值組合成一個(gè)復(fù)合匹配,并且用逗號(hào)分開:
let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a", "A":
print("The letter A")
default:
print("Not the letter A")
}
// 輸出 "The letter A
注意: 如果想要顯式貫穿case分支箫老,請(qǐng)使用fallthrough語句