1.base class?
? ? Swift中可以定義不繼承于其它類的類,稱之為基類(base class),而OC的類都是繼承自NSObject。
2.switch
? ? 在OC中的Switch:
? ? ? ? 不能判斷對(duì)象類型, 只能判斷基本類型中的整數(shù);可以穿透;default位置可以隨便放。
? ? 在Swift中的Switch:
? ? ? ? 可以判斷對(duì)象類型,支持對(duì)象類型、元組、區(qū)間、double類型等等;默認(rèn)不穿透,可以寫fallthough穿透;可以不寫break,如果寫了default,default得放在最后。
3.final關(guān)鍵字
????Swift中的final修飾符可以防止類被繼承,還可以防止子類重寫父類的屬性、方法以及下標(biāo)。
4.guard、inout
? ? Swift中,guard關(guān)鍵字只能作用在函數(shù)中,guard關(guān)鍵字必須和else同時(shí)出現(xiàn),guard關(guān)鍵字只有在條件為false的時(shí)候會(huì)走else語句,反之執(zhí)行后邊語句。
? ? Swift中,inout是修飾函數(shù)參數(shù)類型,表示該參數(shù)在函數(shù)內(nèi)修改后(即函數(shù)返回后),其值為修改后的值。
? ? OC是不支持重載的,Swift是支持重載的。
6.命名空間
? ? OC沒有命名空間,但是在為了區(qū)分在不同框架中可能會(huì)使用相同名字的變量沖突的情況,OC使用前綴來區(qū)別。
? ? Swift有命名空間,默認(rèn)就是項(xiàng)目名稱,同一個(gè)命名空間全局共享,這也是Swift不需要在import頭文件。
7.swift類型安全,oc更靈活
? ??類型安全語言需要代碼里值的類型非常明確。
8.可選類型
? ??Swift引入了可選項(xiàng)類型,用于處理變量值不存在的情況。Optionals類似于OC中指向nil的指針,但是適用于所有數(shù)據(jù)類型,而非僅僅局限于類,Optionals相比于OC中的nil指針,更加安全和簡明。
9.字符串插值、String.Index
????OC:[NSStringstringWithFormat:@"%d",10];
????Swift: "\(10)"
10.OC是動(dòng)態(tài)、Swift是靜態(tài)(函數(shù)內(nèi)聯(lián))
? ??Swift 編譯時(shí)就確定了調(diào)用的方法,OC是調(diào)用之前通過虛函數(shù)表來確定調(diào)用的方法。
11.泛型
? ??泛型是用來使代碼能安全工作,Swift中的范型可以在函數(shù)數(shù)據(jù)和普通數(shù)據(jù)類型中使用,例如類、結(jié)構(gòu)體或枚舉。范型可以解決代碼復(fù)用的問題。
12.訪問權(quán)限
? ??Swift又新增了兩種訪問控制權(quán)限?fileprivate和?open。Swift中訪問權(quán)限由大到小依次為:open > public > internal(默認(rèn))> fileprivate >private。
? ? ? ? open:可以在任何地方訪問,包括override和繼承。
????????public:可以在任何地方訪問,但其他module中不可以被override和繼承,而在本module內(nèi)可以被override和繼承。
????????internal:修飾的屬性或方法在整個(gè)模塊內(nèi)都可以訪問,系統(tǒng)默認(rèn)。
????????fileprivate:在當(dāng)前文件內(nèi)可以被訪問。
????????private:在當(dāng)前類中能被訪問。??
13.enum
????Swift 的枚舉成員在被創(chuàng)建時(shí)本身就是完備的值,這些值的類型是已經(jīng)明確定義好的 Direction 類型. 不會(huì)像 Objective-C 一樣被賦予一個(gè)默認(rèn)的整型值。
14.swift 反射機(jī)制
????所謂反射就是可以動(dòng)態(tài)獲取類型、成員信息,同時(shí)在運(yùn)行時(shí)(而非編譯時(shí))可以動(dòng)態(tài)調(diào)用任意方法、屬性等行為的特性。反射最重要的目的,就是為了解耦。
在Swift中并不提倡使用Runtime,而是像其他語言一樣使用反射(Reflect)。Swift的反射機(jī)制是基于一個(gè)叫?Mirror?的?struct?來實(shí)現(xiàn)的。
Swift其他功能:
1.范圍運(yùn)算符:
????a...b 表示 [a,b] 包括a和b 。 (如3...5 ?就是范圍取3,4,5)
????a..<b 表示 [a,b) 包括a,不包括b 。?(如3..<5 ?就是范圍取3,4)
????常見的如for循環(huán):for i in 0...9{}
2.獨(dú)有的元組類型
????元組(tuples)把多個(gè)值組合成一個(gè)復(fù)合值。元組內(nèi)的值可以使任意類型,并不要求是相同類型。
? ?eg: var value = (Int,String) = (x:15,y:"abc")? ??
3.swift中使用let定義常量,var定義變量
? ??使用常量,更加安全,不能夠被修改,在需要對(duì)對(duì)象進(jìn)行修改的時(shí)候只能用var修飾。
4.if let 、 guard let?
? ??縮減代碼量,安全處理數(shù)據(jù)邏輯,作用是解包。
5.defer?
????defer?block 里的代碼會(huì)在函數(shù) return 之前執(zhí)行,無論函數(shù)是從哪個(gè)分支 return 的,還是有 throw,還是自然而然走到最后一行。? ??
6.高階函數(shù)
? ??高階函數(shù)僅僅只是一個(gè)函數(shù),其可以接收函數(shù)作為參數(shù),或者返回一個(gè)函數(shù)來操作其他函數(shù)。Swift的集合類型中就有這些高階函數(shù):Map, FlatMap, Filter, 和Reduce。
Swift優(yōu)點(diǎn):
1.Swift容易閱讀,語法和文件結(jié)構(gòu)簡易化。
2.Swift更易于維護(hù),文件分離后結(jié)構(gòu)更清晰。
3.Swift更加安全,它是類型安全的語言。
4.Swift代碼更少,簡潔的語法,可以省去大量冗余代碼。
5.Swift速度更快,運(yùn)算性能更高。