-
as相關(guān)
- as 類(lèi)型向上轉(zhuǎn)換時(shí)使用雕沉;消除二義性時(shí)使用痴突,比如一個(gè)數(shù)字是Int還是Double罚缕;如果不知道某個(gè)對(duì)象的具體類(lèi)型(可能是以父類(lèi)的形式儲(chǔ)存的對(duì)象),可以在switch函數(shù)里使用as來(lái)指定類(lèi)型(這個(gè)用法不知道有什么用處)引用自 http://www.111cn.net/sj/iOS/104926.htm
- as! 表示強(qiáng)制類(lèi)型轉(zhuǎn)換,轉(zhuǎn)換不成功就runtime報(bào)錯(cuò)衰琐,類(lèi)似c++的static_cast
- as? 表示可選的類(lèi)型轉(zhuǎn)換,如果轉(zhuǎn)換不成功,則返回nil蛋勺,有點(diǎn)類(lèi)似c++的dynamic_cast
-
@escape相關(guān)
- 說(shuō)白了這個(gè)東西就是標(biāo)記一下,傳入函數(shù)的lambda表達(dá)式是同步執(zhí)行(比如某種transform函數(shù))的還是異步執(zhí)行(比如某種callback函數(shù))的率寡,是提供給編譯器優(yōu)化用的
-
閉包相關(guān)
- 語(yǔ)法
{code...}()
代表一個(gè)馬上執(zhí)行的閉包函數(shù)(暫時(shí)沒(méi)有驗(yàn)證迫卢,只是自己的觀(guān)察)
- 語(yǔ)法
-
(U)Int相關(guān)
- (U)Int分(U)Int(8,16,32,64),官方建議不要使用(U)Int32和(U)Int64冶共,而是直接使用(U)Int類(lèi)型乾蛤,(U)Int類(lèi)型在32位機(jī)器系統(tǒng)中就是32位,64位系統(tǒng)中就是64位捅僵,更具有可移植性
- 官方也不建議使用無(wú)符號(hào)數(shù)家卖,最好使用單純地使用Int類(lèi)型,這樣更加一致
-
類(lèi)型別名typealias
- 使用方法:
typealias AudioSample = UInt16
- 跟c++的使用方式一樣的
- 使用方法:
-
元組相關(guān)
- 元組感覺(jué)就是更加輕量化的匿名結(jié)構(gòu)體庙楚,就是組織多個(gè)變量為一個(gè)復(fù)合體
- 元組內(nèi)的成員可以不是同類(lèi)型的
- 使用方式:
-
let http404Error = (404, "Not Found")
包裝 -
let (statusCode, statusMessage) = http404Error
拆包 -
let (justTheStatusCode, _) = http404Error
只取其中某個(gè)值 -
print("The status code is \(http404Error.0)")
根據(jù)下標(biāo)來(lái)訪(fǎng)問(wèn)成員 -
let http200Status = (statusCode: 200, description: "OK")
可以在定義元組的時(shí)候給成員一個(gè)名字
-
- 元組這個(gè)東西的好處是一些比較簡(jiǎn)單的上荡,變量不多的對(duì)象就不需要再新建一個(gè)類(lèi)了,確實(shí)可以節(jié)省代碼
-
可選類(lèi)型相關(guān)
- 可選類(lèi)型有點(diǎn)類(lèi)似Java中的@NonNull和@Nullable馒闷,@NonNull就表示肯定有值酪捡,@Nullable就是表示這里的可選的的概念
- 跟Java中類(lèi)似,如果聲明了一個(gè)可選變量(Java中為@Nullable或沒(méi)有注解)纳账,且沒(méi)有為其賦值逛薇,那么會(huì)默認(rèn)為nil,如果是一個(gè)普通變量(Java中為@NonNull)疏虫,那就必須為其賦值
- 在一個(gè)可選變量后加
!
表示強(qiáng)制獲取該變量的值永罚,這樣的結(jié)果是可能會(huì)引起運(yùn)行時(shí)異常,所以一般都是確定了該變量肯定有值的時(shí)候才會(huì)這么去用 - 可選綁定一般用在
if
或者while
語(yǔ)句中卧秘,典型用法如下:
if let actualNumber = Int(possibleNumber) {
print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
print("\'\(possibleNumber)\' could not be converted to an integer")
}
// 輸出 "'123' has an integer value of 123"
表示Int(possibleNumber)
結(jié)果如果不是nil則把值賦給actualNumber
然后進(jìn)入if體呢袱,否則進(jìn)入else體
- 隱式解析可選類(lèi)型就是把類(lèi)型后面的
?
改成!
,表示這個(gè)變量一定有值翅敌,以后再取的時(shí)候就不用在變量后面加!
來(lái)取值了羞福,具體用法:
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // 需要驚嘆號(hào)來(lái)獲取值
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // 不需要感嘆號(hào)
//let assumedString: String!這樣聲明后,assumedString仍然可能是nil的蚯涮,
//并不是這樣聲明就強(qiáng)制你一定要聲明時(shí)賦值坯临,所以使用assumedString的時(shí)候仍然有
//運(yùn)行時(shí)錯(cuò)誤的風(fēng)險(xiǎn)
問(wèn)題是如果什么都不加呢焊唬?代表是肯定有值還是什么?
隱式解析可選類(lèi)型本質(zhì)上仍然是可選類(lèi)型看靠,所以可選類(lèi)型可以做的事情隱式解析可選類(lèi)型都可以做
注意:
如果一個(gè)變量之后可能變成nil的話(huà)請(qǐng)不要使用隱式解析可選類(lèi)型赶促。如果你需要在變量的生命周期中判斷是否是nil的話(huà),請(qǐng)使用普通可選類(lèi)型挟炬。
- 異常處理相關(guān)
- 直接看示例代碼
func makeASandwich() throws {
// ...
}
do {
try makeASandwich()
eatASandwich()
} catch SandwichError.outOfCleanDishes {
washDishes()
} catch SandwichError.missingIngredients(let ingredients) {
buyGroceries(ingredients)
}
- 斷言的用法跟其他語(yǔ)言差不多