swift語法中和其它語言(OC,Java,JS)相同的地方就不多贅述,只記錄一下需要注意的地方
1.基本語法部分
- 1.1 常量變量,類型自動推導(dǎo),開發(fā)中盡量使用常量
swift沒有隱式轉(zhuǎn)換: swift對數(shù)據(jù)類型要求異常嚴(yán)格,任何情況都不會作隱式轉(zhuǎn)換,如果要對數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,必須顯式轉(zhuǎn)換(即強轉(zhuǎn))
- 1.2 swift的nil和OC中的nil不一樣:
- 在OC中,nil是一個指向不存在對象的指針.在OC中,基本數(shù)據(jù)類型和結(jié)構(gòu)體是不能被設(shè)置為nil的.
- 在Swift中,nil不是指針,它是一個不確定的值.用來表示值缺失.任意類型的可選狀態(tài)的值缺失都可以賦值nil,并不只是對象類型可以賦值。
- 1.3 可選值 optional
- 定義 變量或者常量 時,在其數(shù)據(jù)類型后加一個 ? 號,表示該變量或者常量是可選的(optional),變量可選項的默認(rèn)值是 nil ,常量可選項沒有默認(rèn)值,主要用于在構(gòu)造函數(shù)中給常量設(shè)置初始值
- 在 常量/變量 后加上 ! 號,表示強制解包(unwrap).如果常量或者變量是optional,則不能參與運算,只有將這個常量或變量強制解包后,才能參與運算,注意:必須確保常量或變量強制解包后的值不是 nil ,否則會在運行時報錯 "fatal error: unexpectedly found nil while unwrapping an Optional value"
- 使用 ?? 運算符可以判斷 變量/常量 的值是否是nil ,如果為nil,則用 ?? 后面的值代替原值

1.4 條件控制
1.5 循環(huán)
1.6 字符串
1.7集合
2. 函數(shù)部分
- 2.1 函數(shù)
函數(shù)定義格式
func 函數(shù)名 (形參列表) -> 返回值類型 {
// 代碼實現(xiàn)
}
- 2.2 閉包
閉包定義格式
閉包 = { (形參) -> 返回值類型 in
// 代碼實現(xiàn)
}
- 2.3 尾隨閉包(Trailing Closures)
函數(shù)內(nèi)聯(lián)閉包的形式
函數(shù)名 ( 參數(shù)1, 參數(shù)2, 參數(shù)3 ,{ (閉包形參) -> 返回值類型 in
// 閉包的代碼實現(xiàn)
} )
尾隨閉包是一個書寫在函數(shù)括號之后的閉包表達(dá)式,函數(shù)支持將其作為最后一個參數(shù)調(diào)用, 尾隨閉包是 函數(shù)內(nèi)聯(lián)閉包的形式的簡寫
函數(shù)名 (函數(shù)形參) { (閉包形參) -> 返回值類型 in
// 代碼實現(xiàn)
}
如果函數(shù)僅有一個參數(shù) 且 這個參數(shù)是閉包,則函數(shù)的() 可以省略
函數(shù)名 { (閉包形參) -> 返回值類型 in
// 代碼實現(xiàn)
}
如果閉包沒有參數(shù) ,由于 閉包返回值支持 類型推導(dǎo),則閉包的"(閉包形參) -> 返回值類型 in" 可以被省略,上面尾隨閉包 可以簡化為這樣
函數(shù)名 {
// 閉包代碼實現(xiàn)
}
- 2.4 <b>閉包內(nèi)存循環(huán)引用
swift 解決循環(huán)引用的方式- 使用weak修飾變量, 打破強引用, 因為使用weak修飾的變量有一次變成nil的機會
- 使用[weak self] 修飾閉包原理跟OC中__weak類似, 這樣在閉包中使用self, 就是弱引用
- 使用[unowned self ] 修飾閉包, 跟__unsafe_unretained類似, 不安全
3.面相對象
- 3.1 構(gòu)造函數(shù)
- 3.2 重載構(gòu)造函數(shù)
- 3.3 kvc構(gòu)造函數(shù)
- 3.4 遍歷構(gòu)造函數(shù)
- 3.5 懶加載
- 3.6 只讀屬性