原文地址:The Good and the Bad of Developing iOS App on Swift
原文發(fā)布時(shí)間:2017年 12月 8日
目前全球共有超過(guò) 7 億臺(tái) iPhone 處于活躍狀態(tài)页藻,這造就了 iOS 作為全球第二大移動(dòng)設(shè)備平臺(tái)的狀態(tài)市怎。雖然安卓系統(tǒng)的全球市場(chǎng)占有率超過(guò) iOS 系統(tǒng)姆蘸,但在諸如美國(guó)昌渤、法國(guó)和英國(guó)的區(qū)域性市場(chǎng)中 iOS 系統(tǒng)仍然占據(jù)主導(dǎo)地位能岩。因此許多公司專注于 iOS 平臺(tái)進(jìn)行軟件開發(fā)沥阱,因?yàn)樗麄儗?iOS 平臺(tái)視作關(guān)鍵投資機(jī)會(huì)泣崩。
如果你的公司也正計(jì)劃跟隨 iOS 軟件開發(fā),那么你需要作出一個(gè)至關(guān)重要的決定杠愧。你需要為你的產(chǎn)品選擇合適的技術(shù)組合待榔。你的目標(biāo)是什么?如果是原生應(yīng)用開發(fā)而不是跨平臺(tái)軟件流济,你會(huì)選用哪種編程語(yǔ)言?久經(jīng)考驗(yàn)的 Objective-C 還是 Swift腌闯?
為了幫助你作好這個(gè)抉擇绳瘟,我們來(lái)看一看使用 Swift 語(yǔ)言進(jìn)行 iOS 開發(fā)會(huì)有哪些優(yōu)勢(shì)和弊端。
關(guān)于這種編程語(yǔ)言姿骏,你必須了解哪些信息糖声?使用 Swift 會(huì)有哪些風(fēng)險(xiǎn)?為了開始討論 Swift 語(yǔ)言的優(yōu)缺點(diǎn)分瘦,我們先回顧一下 Swift 的發(fā)展歷史蘸泻。
Swift - 它的歷史和背景故事
Apple 于 2014 年的 WWDC(Worldwide Developers Conference 全球開發(fā)者大會(huì))上首次推出了 Swift 這種編程語(yǔ)言,它是可用于 iOS嘲玫、macOS悦施、tvOS 以及 watchOS 平臺(tái)開發(fā)的第二種官方編程語(yǔ)言。就在去年 9月份去团,Swift 已經(jīng)更新到 4.0 版本抡诞,這次更新帶來(lái)了很多改變和兼容舊版本的模式。
在強(qiáng)調(diào) iOS 8 SDK 發(fā)布的官方新聞稿(譯者注:參見 [Apple 發(fā)布包含 4,000 多個(gè)全新 API 的 iOS 8 SDK](https://www.apple.com/cn/newsroom/2014/06/02Apple-Releases-iOS-8-SDK-With-Over-4-000-New-APIs/))中土陪,Apple 對(duì)這個(gè)新編程語(yǔ)言的描述如下:
> “ Swift 是一種適用于 iOS 和 OS X? 的全新而強(qiáng)大的編程語(yǔ)言昼汗,有了它,開發(fā)者可以更輕松地創(chuàng)建精彩的應(yīng)用程序鬼雀。Swift 專為 Cocoa? 和 Cocoa Touch? 設(shè)計(jì)顷窒,將匯編語(yǔ)言的高效表現(xiàn)與熱門腳本語(yǔ)言的交互性完美融合。經(jīng)過(guò)精心設(shè)計(jì)源哩,Swift 可幫助開發(fā)者消除各種常見編程錯(cuò)誤鞋吉,從而寫出更安全出刷、更可靠的代碼。同時(shí)坯辩,該語(yǔ)言可與 Objective-C? 代碼共存馁龟,讓開發(fā)者可以輕松將 Swift 集成到現(xiàn)有的應(yīng)用程序。Xcode? Playgrounds 可即時(shí)顯示 Swift 代碼輸出漆魔,賦予編寫 Swift 出色的互動(dòng)性坷檩。”
年紀(jì)輕輕的 Swift 語(yǔ)言在 TIOBE “全球最流行的編程語(yǔ)言” 榜上迅速攀升至第 11 名改抡。至此 Swift 語(yǔ)言已經(jīng)超過(guò)它的前輩 Objective-C 7 名矢炼,實(shí)現(xiàn)了它的初始目標(biāo)。Swift 之所以能在如此短的時(shí)間內(nèi)全球流行阿纤,原因之一是 Apple 這個(gè)品牌享譽(yù)全世界句灌。即便如此,要與一種經(jīng)過(guò) 30 多年考驗(yàn)的編程語(yǔ)言競(jìng)爭(zhēng)并贏得百萬(wàn)名開發(fā)者的信任絕非易事欠拾。
所以胰锌,讓我們仔細(xì)分析一下 Swift 的優(yōu)缺點(diǎn)—它被選作 iOS 開發(fā)的主流語(yǔ)言的誘因以及限制其發(fā)展的短板。
使用 Swift 語(yǔ)言開發(fā) iOS 軟件 — Swift 語(yǔ)言的優(yōu)點(diǎn)
**易讀性 — 易維護(hù)性**
Swift 代碼與人們?nèi)粘J褂玫挠⒄Z(yǔ)非常相似藐窄,這得益于借鑒自 C#资昧、Python 和 Ruby 的句法,這三種的編程語(yǔ)言以優(yōu)雅句法而著稱荆忍。相比之下格带,Objective-C 的句法與 C 的令人恐懼的句法非常接近。因此刹枉,具備簡(jiǎn)化的句法和語(yǔ)法的 Swift 語(yǔ)言更為直白易懂叽唱,其表達(dá)方式也更加靈活。實(shí)際上微宝,Apple 對(duì) Swift 語(yǔ)言的簡(jiǎn)單非常有信心棺亭,甚至通過(guò) Swift Playgrounds 這個(gè) iPad 應(yīng)用程序中的游戲鼓勵(lì)小朋友們學(xué)習(xí)開發(fā)應(yīng)用程序。
在解釋 Swift 語(yǔ)言的優(yōu)勢(shì)時(shí)芥吟,連線雜志的資深撰稿人 Cade Metz 的描述如下:
“ Swift 的優(yōu)異之處在于它是為普通程序員設(shè)計(jì)的侦铜。它的設(shè)計(jì)適用于所有使用情景,甚至是最簡(jiǎn)單的移動(dòng)應(yīng)用钟鸵,Apple 還為它專門開發(fā)了名為 “Playgrounds” 的工具钉稍,這個(gè)工具在自學(xué)編程時(shí)異常有效」姿#”
他進(jìn)一步分析了 Swift 語(yǔ)言與 Google 的 Go 語(yǔ)言迥然不同的發(fā)展規(guī)劃贡未。(Google 于 2009 年推出 Go 語(yǔ)言,時(shí)至今日這種編程語(yǔ)言仍然在吸引開發(fā)者的道路上艱難前行),在此他引用了 Paul Jensen — 一名編程語(yǔ)言分析師的看法:
“ 對(duì)于 Google 的 Go 語(yǔ)言俊卤,沒(méi)有真正值得開發(fā)者選用它的理由……Swift 則對(duì)開發(fā)者很有吸引力(它的直白易懂嫩挤、簡(jiǎn)單明了優(yōu)于 Objective-C)“
此外,有別于 Objective-C消恍,Swift 拋棄了之前雙文件形式(以 .h 為后綴的頭文件 + 以 .m 為后綴的實(shí)施文件的組合定義類)岂昭,為開發(fā)者省去了額外的操作。Swift 去除了模版式的重復(fù)工作狠怨,同時(shí)輔助開發(fā)者改進(jìn)代碼質(zhì)量约啊、它所提供的語(yǔ)言特色以及備注形式。
**Swift 言簡(jiǎn)意賅**
Swift 的目標(biāo)之一是編程語(yǔ)言的簡(jiǎn)練性佣赖。單就字符串內(nèi)插這一項(xiàng)而言恰矩,使用 Swift 語(yǔ)言最多可將使用 Objective-C 編寫的移動(dòng)應(yīng)用的代碼量減少 70%。更少的代碼意味著開發(fā)和測(cè)試更為快速—因此可以降低維護(hù)成本憎蛤、減少資源耗費(fèi)外傅。
**易于擴(kuò)展**
直觀明了的代碼可加快開發(fā)速度。除此之外俩檬,你的產(chǎn)品還是面向未來(lái)的萎胰,你可以為它添加新特性。亦即你的產(chǎn)品具備易擴(kuò)展性豆胸。進(jìn)一步說(shuō)奥洼,出于長(zhǎng)期的投資規(guī)劃,你需要意識(shí)到相對(duì)于 Objective-C 而言晚胡,Apple 更可能支持 Swift。
**與 Objective-C 的互操作性**
雖然這方面不是 Swift 的絕對(duì)優(yōu)勢(shì)嚼沿,這個(gè)特性必然是有價(jià)值的估盘。Buffer 公司(譯者注:這是國(guó)外一家社交媒體管理平臺(tái))的一名 iOS 開發(fā)者 Jordan Morgan 在他的博客中寫道:
“ 毫無(wú)疑問(wèn) — Swift 是一種標(biāo)志著未來(lái)的新工具。Objective-C 已經(jīng)開始老去骡尽,而且終將喪失它的流行度遣妥。但是就現(xiàn)階段而言,他們倆需要能和平共處……Objective-C 建立在一個(gè)逐漸過(guò)時(shí)的編程語(yǔ)言之上攀细,只是為現(xiàn)代技術(shù)重新改造了而已箫踩。”
正如 Morgan 所說(shuō)谭贪,Swift 并未完全取代 Objective-C境钟,因?yàn)?Objective-C 目前是并將持續(xù)作為許多移動(dòng)應(yīng)用的組成部分,也將需要持續(xù)的維護(hù)俭识。Swift 能完全與它的前輩互通慨削,因此兩者可以在同一個(gè)程序、文件或者一行代碼中共存。
**安全性和改進(jìn)的性能**
正如它的名字所暗示的缚态,Swift 誕生于對(duì)迅速的追求磁椒。它強(qiáng)調(diào)速度和性能,最初這兩方面上它比 Objective-C 提高了 40%玫芦。通過(guò)達(dá)成的多個(gè)里程碑以及開發(fā)者們執(zhí)行的測(cè)試浆熔,這一點(diǎn)已經(jīng)非常明顯了。
Swift 的另一個(gè)優(yōu)勢(shì)是安全性桥帆。得益于它的強(qiáng)悍性和靜態(tài)數(shù)據(jù)類型的特點(diǎn)医增,Swift 幫助開發(fā)者在編譯前發(fā)現(xiàn)程序錯(cuò)誤并及時(shí)修復(fù)錯(cuò)誤。而且 Swift 具有智能的針對(duì)空指針的安全措施可以規(guī)避由無(wú)效的數(shù)據(jù)引用導(dǎo)致的編譯錯(cuò)誤环葵。
**跨設(shè)備支持**
Swift 不僅支持 iPad 和 iPhone调窍,還支持包括 Apple Watch、Apple TV 和 Mac 在內(nèi)的全套設(shè)備张遭。
**用于全棧開發(fā)的潛力**
IBM 將 Swift 應(yīng)用于云服務(wù)開發(fā)的努力目前非常成功邓萨。Swift 在服務(wù)器端可與最流行的后端技術(shù)對(duì)接。與全棧 Javascript 開發(fā)一樣菊卷,在應(yīng)用程序的前端和后端同時(shí)使用 Swift 能帶來(lái)廣泛的代碼共享和重用性 — 提高開發(fā)速度的同時(shí)減少開發(fā)投入缔恳。
**自動(dòng)內(nèi)存管理**
在博客 Security Innovation (安全性創(chuàng)新)中, Kevin Poniatowski 于 2014 年發(fā)表的博文中成功預(yù)測(cè):
?"我堅(jiān)信 Swift 自動(dòng)管理內(nèi)存的特色將得到 Objective-C 開發(fā)者的歡迎洁闰。這個(gè)特性能夠消除一些非常嚴(yán)重的代碼缺陷歉甚,例如非常煩人且有很大潛在危害的 ‘釋放后使用’ 這類編碼錯(cuò)誤"
旨在防止內(nèi)存泄漏、優(yōu)化程序性能扑眉,Swift 的所有 API 都采用了自動(dòng)引用計(jì)數(shù)纸泄。簡(jiǎn)而言之,它自主管理內(nèi)存使得程序以最高效地利用資源腰素。不需要開發(fā)者手動(dòng)設(shè)置內(nèi)存聘裁,Swift 的慣用工具可以在開發(fā)者為適應(yīng)此變化改寫代碼時(shí)提供支持和指導(dǎo)。
**來(lái)自 IBM 和 Apple 的企業(yè)支持**
Apple 與 IBM 協(xié)作投入 Swift 的發(fā)展和利用弓千。Swift 因此獲得了最活躍的開源群體衡便。事實(shí)上,Swift 是 Github 上最受關(guān)注的編程語(yǔ)言之一洋访。
Swift 有很多優(yōu)點(diǎn)镣陕,尤其是和它的前輩 Objective-C 相比,盡管如此它也受到一些短板的牽制姻政。
使用 Swift 語(yǔ)言開發(fā) iOS 軟件 — Swift 語(yǔ)言的缺點(diǎn)
缺乏與舊版本語(yǔ)言的兼容性 (部分解決)
由于新版本的發(fā)布會(huì)引入巨大變動(dòng)呆抑,Swift 通常被視作不穩(wěn)定的。許多開發(fā)者抱怨 Xcode 對(duì)更新 Swift 代碼版本的幫助并不能修復(fù)所有問(wèn)題扶歪,所以將項(xiàng)目遷移至新 Swift 版本非常費(fèi)時(shí)且成本較高理肺。
在最新發(fā)布的 Swift 4.0 中摄闸,當(dāng)你使用 Xcode 編譯 Swift 3 的代碼時(shí),你可以使用 Swift 4.0 中的大多數(shù)新特性妹萨。
**根據(jù) Apple 提供的 Swift 4.0 的官方指南**:
> “ 使用 Swift 4 編寫的編譯目標(biāo)可以依靠用 Swift 3 編寫的編譯目標(biāo)年枕,反之亦然。這意味著對(duì)于一個(gè)有多個(gè)框架組成的大項(xiàng)目乎完,你可以逐個(gè)將框架從 Swift 3 向 Swift 4 遷移熏兄。”
速度問(wèn)題
這個(gè)語(yǔ)言的早期版本有很多速度問(wèn)題树姨,不過(guò)摩桶,如上所述,速度問(wèn)題隨著新版本的推出有了很大改進(jìn)帽揪。
一個(gè)新語(yǔ)言
Swift 的開發(fā)目前仍屬于起步階段硝清,它需要很長(zhǎng)時(shí)間才能發(fā)展成熟、發(fā)現(xiàn)并修復(fù)它的問(wèn)題區(qū)域转晰÷茫“原生” 的庫(kù)和工具在數(shù)量上仍然非常有限。而且因?yàn)樗男路f程度查邢,使用 Swift 的開發(fā)者也數(shù)量有限蔗崎。盡管如此,Swift 的開發(fā)者群體正迅速壯大扰藕,對(duì) Swift 開發(fā)者的需求也在增加缓苛。
Swift 語(yǔ)言會(huì)標(biāo)志著 iOS 開發(fā)的發(fā)展方向嗎?
雖然處于發(fā)展初期邓深,Swift 已經(jīng)創(chuàng)造了很多成功案例未桥。實(shí)際上,它的最新版本芥备,Swift 4.0 帶來(lái)了極大改進(jìn): 更好的版本兼容性減少了向 Swift 4.0 過(guò)程中的摩擦钢属,Swift 包管理器的改進(jìn)、API 優(yōu)化以及其它新增特色门躯。
使用 Swift 的大公司有領(lǐng)英、Coursera酷师、Pandora讶凉、推特、Fitbit 以及 Vimeo 等大牌公司山孔,F(xiàn)acebook 和優(yōu)步對(duì)這個(gè)語(yǔ)言也重新萌生了興趣懂讯。因此伴隨采用率的提升,Swift 有望最終取代 Objective-C 成為 iOS 開發(fā)的首選語(yǔ)言台颠。