
一、Swift 介紹
Swift是蘋果于2014年WWDC(蘋果開發(fā)者大會(huì))發(fā)布的新開發(fā)語(yǔ)言,可與Objective-C共同運(yùn)行于MAC OS和iOS平臺(tái),用于搭建基于蘋果平臺(tái)的應(yīng)用程序。
Swift 使用
自動(dòng)引用計(jì)數(shù)(Automatic Reference Counting, ARC)來(lái)簡(jiǎn)化內(nèi)存管理Swift Foundation框架可無(wú)縫對(duì)接現(xiàn)有的
Cocoa 框架,并且兼容 Objective-C代碼,支持面向過(guò)程編程和面向?qū)ο?/code>編程,Swift也是一門類型安全的語(yǔ)言。Swift中范型是用來(lái)使代碼能安全工作,可以在函數(shù)數(shù)據(jù)和普通數(shù)據(jù)類型中使用,例如類、結(jié)構(gòu)體或枚舉。范型可以解決代碼復(fù)用的問(wèn)題
//舉個(gè)簡(jiǎn)單例子:這兩個(gè)方法很類似,主要就一個(gè)參數(shù)類型的區(qū)別。
func isIntEqual(x:Int,y:Int) -> Bool {
return x == y
}
func isStringEqual(x:String,y:String) -> Bool {
return x == y
}
//我們可以利用范型合并一下:
func isObjEqual<T:Equatable>(x:T,y:T) -> Bool {
return x == y
}
- Swift的訪問(wèn)權(quán)限變更(新增了兩種訪問(wèn)權(quán)限,權(quán)限更細(xì)化)
訪問(wèn)權(quán)限 由大到小 依次為:open,public,internal(默認(rèn)),fileprivate,private
二、Swift 優(yōu)點(diǎn)
1、 簡(jiǎn)潔的語(yǔ)法,性能較好
swift語(yǔ)言比OC精簡(jiǎn),整個(gè)項(xiàng)目中丟掉了.h頭文件,以及頭文件的引入。性能是Objective-C的1.3倍
2、報(bào)錯(cuò)精準(zhǔn)
報(bào)錯(cuò)的時(shí)候直接顯示報(bào)錯(cuò)行。
3、定義變量簡(jiǎn)單
定義變量不用區(qū)分整型,浮點(diǎn)型等等,變量使用var,常量使用let。
4、可視化互動(dòng)效果
開發(fā)工具帶來(lái)了Xcode Playgrounds功能,該功能提供強(qiáng)大的互動(dòng)效果,能讓Swift源代碼在撰寫過(guò)程中實(shí)時(shí)顯示出其運(yùn)行結(jié)果。
5、函數(shù)式編程的支持(Map、FlatMap、Filter、Reduce等函數(shù)方法)
Swift 語(yǔ)言本身提供了對(duì)函數(shù)式編程的支持;
Objc 本身是不支持的,通過(guò)引入 ReactiveCocoa 這個(gè)庫(kù)才可支持。
Map:
var results = [1,3,5,7]
let results = values.map({
(element) -> Int in
return element * 2
})
//"[2, 6, 10, 14]"
Filter:
var values = [1,3,5,7,9]
let flattenResults = values.filter{
$0 % 3 == 0
}
//[3, 9]
Reduce:
var values = [1,3,5]
let initialResult = 0
var reduceResult = values.reduce(initialResult, combine: {
(tempResult, element) -> Int in
return tempResult + element
})
print(reduceResult)
//9
三、Swift 缺點(diǎn)
1、推廣度還不全面,資源少
很多大公司,以及一些老的項(xiàng)目,仍然使用OC語(yǔ)言進(jìn)行開發(fā)。當(dāng)遇到一些問(wèn)題的時(shí)候,解決問(wèn)題的方案很少,網(wǎng)上的資源也很稀缺。
2、還不穩(wěn)定
從swift2.0到swift3.0再到現(xiàn)在的swift4.0區(qū)別很大,每次升級(jí)都會(huì)有幾十甚至上百個(gè)錯(cuò)誤提示,難免急出一身冷汗。
3、第三方庫(kù)的支持不夠多
現(xiàn)在swift版本的第三方庫(kù)是非常稀有的,有時(shí)需要導(dǎo)入OC版本的第三方來(lái)進(jìn)行混合開發(fā),而有的·兼容性·并不好,而且使項(xiàng)目變大,運(yùn)行速度也會(huì)變慢。
4、App體積變大
使用 Swift 后, App 體積大概增加 5-8 M左右,對(duì)體積大小敏感的慎用。(體積變大的原因是因?yàn)?Swift 還在變化,所以 Apple 沒有在 iOS 系統(tǒng)里放入 Swift 的運(yùn)行庫(kù),反而是每個(gè) App 里都要包含其對(duì)應(yīng)的 Swift 運(yùn)行庫(kù)。)
5、上線方式改變
不能使用application Loader上傳包文件,會(huì)提示你丟失了swift support files,只能使用xcode直接上傳。
四、Swift 與 Objective-C 區(qū)別
========================= Swift獨(dú)有 ====================
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ú)有的元組類型(高級(jí)數(shù)據(jù)類型)
-
元組(tuples)把多個(gè)值組合成一個(gè)復(fù)合值。元組內(nèi)的值可以使任意類型,并不要求是相同類型。eg:
var value = (Int,String) = (x:15,y:"abc")
3、使用let定義常量,var定義變量
使用常量,更加安全,不能夠被修改,在需要對(duì)對(duì)象進(jìn)行修改的時(shí)候 只能用var修飾.
4、if let 、 guard let 的用法
縮減代碼量,安全處理數(shù)據(jù)邏輯。
5、引入了可選項(xiàng)類型(Optionals),處理變量值不存在的情況
可選項(xiàng)的意思有兩種:一是變量是存在的,例如等于X,二是變量值根本不存在。
Optionals類似于Objective-C中指向nil的指針,但是適用于所有數(shù)據(jù)類型,而非僅僅局限于類
Optionals 相比Objective-C中nil指針更加安全和簡(jiǎn)明,也是Swift諸多最強(qiáng)大功能的核心)
========================= 細(xì)節(jié)使用區(qū)別 ====================
1、swift不分.h和.m文件 ,一個(gè)類只有.swift一個(gè)文件,所以整體的文件數(shù)量比起OC有一定減少
2、swift句尾不需要分號(hào) ,除非你想在一行中寫三行代碼就加分號(hào)隔開
3、swift數(shù)據(jù)類型都會(huì)自動(dòng)判斷 , 只區(qū)分變量var和常量let
4、強(qiáng)制類型轉(zhuǎn)換格式不同:OC強(qiáng)轉(zhuǎn):(int)a 而 Swift強(qiáng)轉(zhuǎn):Int(a)
5、關(guān)于BOOL類型更加嚴(yán)格 ,Swift不再是OC的非0就是真,而是true才是真,false才是假
6、swift的循環(huán)語(yǔ)句中必須加{},就算只有一行代碼也必須要加
7、swift的switch語(yǔ)句后面可以跟各種數(shù)據(jù)類型了 ,如Int、字符串都行,并且里面不用寫break(OC的不能跟字符串)
8、swift if語(yǔ)句后的括號(hào)可以省略: if a>b {},而OC里 if后面必須寫括號(hào)
9、swift打印用 print("") 打印變量時(shí)可以 print("\(value)"),不用像OC那樣記很多%@,d%等
10、Swift3的【Any】可以代表任何類型的值,無(wú)論是類、枚舉、結(jié)構(gòu)體還是任何其他Swift類型,這個(gè)對(duì)應(yīng)OC中的【id】類型