Swift優(yōu)缺點(diǎn)

Swift和OC共用一套運(yùn)行時(shí)環(huán)境逊脯,Swift的類型可以橋接到OC,反之亦然竣贪。兩者可以互相引用混合編程军洼。
Swift新出的一些新興概念,這些是OC沒(méi)有的贾富,比如泛型歉眷、元組等牺六。
優(yōu)點(diǎn)

  1. 簡(jiǎn)潔的語(yǔ)法颤枪,性能較好
    swift比OC精簡(jiǎn),整個(gè)項(xiàng)目少了.h文件淑际,以及頭文件的引入畏纲,效率提升1.3倍。
  2. swift更加安全
    類型安全的語(yǔ)言春缕,可選類型盗胀,強(qiáng)制解包等 if letguard let锄贼。
  3. 定義變量簡(jiǎn)單
    定義變量不區(qū)分整型票灰,浮點(diǎn)型等,變量使用var,常量使用let屑迂。
  4. 函數(shù)式編程的支持
    filter浸策,map,reduce惹盼,flatMap庸汗,compactMap等。
    swift本身提供了對(duì)函數(shù)式編程的支持手报,OC本身是不支持的蚯舱,需要引入ReactiveCocoa這個(gè)庫(kù)才支持。
  5. 可視化互動(dòng)效果
    開發(fā)工具帶來(lái)了Xcode Playgrounds功能掩蛤,該功能提供強(qiáng)大的互動(dòng)效果枉昏,能讓swift源代碼在撰寫過(guò)程中實(shí)時(shí)顯示出其運(yùn)行結(jié)果。
  6. 精準(zhǔn)報(bào)錯(cuò)
    報(bào)錯(cuò)的時(shí)候直接顯示報(bào)錯(cuò)行盏档。

缺點(diǎn)

  1. 版本不穩(wěn)定凶掰。
  2. 使用比例偏低。
  3. swift開源庫(kù)較少蜈亩,不過(guò)正在改變中懦窘。
  4. App體積變大,多出5~8M稚配,由于版本不穩(wěn)定畅涂,iOS系統(tǒng)庫(kù)中并沒(méi)有包含swift的運(yùn)行庫(kù),反而是每個(gè)App都要包含其對(duì)應(yīng)的swift運(yùn)行庫(kù)道川。
  5. 公司使用比例不高午衰,很多公司以穩(wěn)為主,很少一些在進(jìn)行混合開發(fā)冒萄,更少一些是swift開發(fā)臊岸。
  6. 純swift的運(yùn)行時(shí)和OC有本質(zhì)區(qū)別,一些OC中強(qiáng)大的運(yùn)行時(shí)功能尊流,在純swift中變無(wú)效了帅戒。

1. swift可選類型

swift引入可選類型,用于處理變量值不存在的情況崖技,Optionals類似于OC中指向nil的指針逻住,但是適用于所有數(shù)據(jù)類型,而非僅僅局限于類迎献,Options相比于OC中nil指針瞎访,更加安全和簡(jiǎn)明,并且也是Swift諸多強(qiáng)大功能的核心吁恍。

2. swift中泛型

解決代碼復(fù)用問(wèn)題
例如兩個(gè)方法類似扒秸,主要是參數(shù)類型的區(qū)別

func isIntEqual(x: Int, y: Int) -> Bool {
    return x == y
}

func isStringEqual(x: Int, y: Int) -> Bool {
    return x == y
}

可以利用泛型合并一下:

func isObjEqual<T: Equaltable>(x: T, y: T) -> Bool {
    return x == y
}

當(dāng)使用時(shí)播演,如果將兩個(gè)不同類型的數(shù)進(jìn)行比較,編譯器會(huì)馬上提醒我們伴奥,從而快速避免這種情況宾巍。

3. 訪問(wèn)權(quán)限變更

swift新增兩種權(quán)限,fileprivate渔伯,open顶霞,權(quán)限更細(xì)化。
open锣吼、public选浑、internal(默認(rèn))、fileprivate玄叠、private
開放權(quán)限依次從大到小

  • open:可以被任何人使用古徒,包括override和繼承。
  • public:可以被任何人訪問(wèn)读恃,但其他module中不可以被override和繼承隧膘,在本module中可以被override和繼承。
  • internal:系統(tǒng)默認(rèn)訪問(wèn)級(jí)別寺惫,internal修飾符可寫可不寫疹吃,訪問(wèn)級(jí)別所修飾的屬性或方法在源代碼所在的整個(gè)模塊都可以訪問(wèn)。
    如果是框架或者庫(kù)代碼西雀,則整個(gè)框架內(nèi)部都可以訪問(wèn)萨驶,框架由外部代碼所引用時(shí),則不可以訪問(wèn)艇肴。
    如果是App代碼腔呜,也是在這個(gè)App代碼,也是整個(gè)App內(nèi)部可以訪問(wèn)再悼。
  • fileprivate:表示這個(gè)元素的訪問(wèn)權(quán)限為文件內(nèi)私有核畴,包括extension時(shí)可以訪問(wèn)
  • private:只在當(dāng)前類或結(jié)構(gòu)體的作用域可訪問(wèn)。

4.Swift便捷的函數(shù)式編程

4.1冲九、map

var values = [1, 3, 5, 7]
let result = values.map( { (element) -> Int in
    return element * 2
}) // [2, 6, 10, 14]

4.2谤草、filter

var result = [1, 3, 5, 7, 9]
let flattenResult = result.filter{ $0 % 3 == 0 }
// [3, 9]

4.3、reduce

var result = [1, 3, 5]
let initialResult = 10
var reduceResult = values.reduce(initialResult, combine: { $0 + $1 })
print(reduceResult) // 10 + 1 + 3 + 5 = 19

4.4娘侍、flatMap(合并集合)

let arrayNumbers = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(arrayNumbers.flatMap{ $0 }) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(arrayNumbers.flatMap{ $0.map{ $0 *10 } }) // [10, 20, 30, 40, 50, 60, 70, 80, 90]
print(arrayNumbers.flatMap{ $0.filter{ $0 > 4 } }) // [5, 6, 7, 8, 9]

4.5咖刃、compactMap(過(guò)濾空值)

let names: [String?] = ["zhangsan", nil, "lisi", "wangwu", nil, "zhaoliu"]
print(names.count) // 6
print(names.compactMap{ $0 }) // ["zhangsan", "lisi", "wangwu", "zhaoliu"] 過(guò)濾了空值

// 打印不是空值的字符串的個(gè)數(shù)
print(names.compactMap{ $0?.count }) // [8, 4, 6, 7]

5. Swift獨(dú)有的元組類型

元組(tuples)把多個(gè)值組合成一個(gè)復(fù)合值泳炉。元組內(nèi)的值可以是任意類型憾筏,并不要求相同類型。

var value = (Int, String) = (x: 15, y: "abc")

6. Swift中使用let定義常量花鹅,var定義變量

使用常量氧腰,更加安全,不能夠被修改。
在需要對(duì)對(duì)象進(jìn)行修改的時(shí)候古拴,只能用var修飾箩帚。

7. 細(xì)節(jié)使用區(qū)別

  1. swift不區(qū)分.h和.m,一個(gè)類只有.swift一個(gè)文件黄痪,所以整體的文件數(shù)量比起OC有一定的減少紧帕。
  2. swift句尾不需要分號(hào),除非想在一行中寫三行代碼桅打,加分號(hào)隔開是嗜。
  3. swift數(shù)據(jù)類型都會(huì)自動(dòng)判斷,只區(qū)分常量let和變量var挺尾。
  4. 強(qiáng)制類型轉(zhuǎn)換格式不同鹅搪,OC強(qiáng)轉(zhuǎn):(Int)a。swift:Int(a)遭铺。
  5. 關(guān)于BOOL類型更加嚴(yán)格丽柿,swift不再是OC的非0就是真,而是true才是真魂挂,false才是假甫题。
  6. swift循環(huán)語(yǔ)句中必須加{},就算只有一行也要加涂召。
  7. swift的swift語(yǔ)句后面可以跟各種數(shù)據(jù)類型幔睬,如Int,字符串都行芹扭,并且里面不需要寫break麻顶。
  8. swift if后的括號(hào)可以省略,if a > b {}舱卡,而OC里if后面必須寫括號(hào)辅肾。
  9. swift打印用 print("")打印變量可以 print("(value)")不用像oc一樣寫很多%d,%@等。
  10. swift的【Any】可以代表任意類型的值轮锥,無(wú)論是類矫钓、枚舉、結(jié)構(gòu)體還是其它swift類型舍杜,這個(gè)對(duì)應(yīng)OC中的【id】類型新娜。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市既绩,隨后出現(xiàn)的幾起案子概龄,更是在濱河造成了極大的恐慌,老刑警劉巖饲握,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件私杜,死亡現(xiàn)場(chǎng)離奇詭異蚕键,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)衰粹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門锣光,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人铝耻,你說(shuō)我怎么就攤上這事誊爹。” “怎么了瓢捉?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵替废,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我泊柬,道長(zhǎng)椎镣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任兽赁,我火速辦了婚禮状答,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刀崖。我一直安慰自己惊科,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布亮钦。 她就那樣靜靜地躺著馆截,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜂莉。 梳的紋絲不亂的頭發(fā)上蜡娶,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音映穗,去河邊找鬼窖张。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蚁滋,可吹牛的內(nèi)容都是我干的宿接。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼辕录,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼睦霎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起走诞,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤副女,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后速梗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肮塞,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年姻锁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了枕赵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡位隶,死狀恐怖拷窜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涧黄,我是刑警寧澤篮昧,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站笋妥,受9級(jí)特大地震影響懊昨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜春宣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一酵颁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧月帝,春花似錦躏惋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至簸搞,卻和暖如春扁位,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趁俊。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工贤牛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人则酝。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓殉簸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沽讹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子般卑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容