分享一下,初學swift中,感覺和OC不太一樣,需要注意下的地方。
類型
強類型語言,let常量,var變量, 變量名后接?可選類型,!強制解封
元組,我很喜歡
運算符
區(qū)間運算符 a...b,a..<b:從a到b,前者包含b,后者不含
空合運算符 a ??:等價于a != nil ? a! : b
控制流
判斷語句中可以直接初始化常量變量
循環(huán)語句可以加標簽,break或者continue時帶標簽,直接中斷到對應(yīng)的循環(huán)層
結(jié)構(gòu)體,枚舉和類的區(qū)別
在swift中,結(jié)構(gòu)體跟類非常像,枚舉也可以有自己的方法
枚舉除了有原始值還有關(guān)聯(lián)值
結(jié)構(gòu)體和枚舉是值類型,類是引用類型
結(jié)構(gòu)體和類都有屬性,方法,下標,擴展,協(xié)議和構(gòu)造過程
只有類有析構(gòu),繼承,運行時類型轉(zhuǎn)換,引用計數(shù)
array,dictionary,set在swift中都是結(jié)構(gòu)體
mutating函數(shù)可以改變self本身
函數(shù),閉包
這個部分需要仔細看下
函數(shù)的定義方法比較獨特:func 函數(shù)名(參數(shù)標簽 參數(shù)名: 參數(shù)類型) -> 返回值類型
通配符表達式_可以在賦值過程中顯式忽略某個值
支持嵌套函數(shù),也支持把函數(shù)當成一個類型,作為參數(shù)或者返回值
閉包,一種特殊的函數(shù)吧,類似OC中的block,也是引用類型
閉包的縮寫需要留意一下,可以寫成很簡單的樣子
自動閉包,指定時間延遲處理
逃逸閉包,函數(shù)返回后仍可使用,關(guān)鍵字@escaping
類
類構(gòu)造要仔細看下,我覺得有點坑,指定構(gòu)造器和便利構(gòu)造器比較好理解,但是構(gòu)造順序很坑,先是子類的屬性,依次向上構(gòu)造直到根類,再試調(diào)用根類的其他處理,依次向下調(diào)用直到子類。
類間,類閉包間的循環(huán)陰用,使用weak或unowned解決,之前區(qū)別主要是weak用于可選類型,unowned永不不可選類型,但是使用unowned時可能需要隱式解析可選屬性
重寫父類方法必須用override,便利構(gòu)造方法除外
屬性、方法、下標
屬性支持類屬性,OC在iOS8上也支持了
willset,didset在初始化,或者weak類型自動置空時不會調(diào)用
方法,下標比較簡單
錯誤處理
swift的錯誤處理是一等公民, defer語句在即將離開當前代碼塊時執(zhí)行一系列語句 ,而且延遲執(zhí)行的操作會按照它們被指定時的順序的相反順序執(zhí)行
協(xié)議
只有繼承于OC的類支持可選協(xié)議
協(xié)議支持默認實現(xiàn)
如果多個協(xié)議擴展都為同一個協(xié)議要求提供了默認實現(xiàn),而遵循協(xié)議的類型又同時滿足這些協(xié)議擴展的限制條件,那么將會使用限制條件最多的那個協(xié)議擴展提供的默認實現(xiàn)(這句沒搞懂限制條件多具體指什么)
泛型
用起來感覺比C++簡單
where 指定條件,總是讓我感覺像數(shù)據(jù)庫語句
參考:[The Swift Programming Language]http://wiki.jikexueyuan.com/project/swift/