猿題庫從 Objective-C 到 Swift 的遷移

引言

相信沒有人會(huì)懷疑毛萌,Swift 是 iOS 開發(fā)未來的主流語言阁将,但是由于 Swift 語言的不斷變化以及龐大的遷移成本做盅,真正把項(xiàng)目遷移到 Swift 語言的公司并不多吹榴。而猿題庫 iOS 客戶端是一個(gè)超過 3 年的項(xiàng)目帅刀,積累了超過 15 萬行的 Objective-C 代碼扣溺,我相信它在遷移過程中的經(jīng)驗(yàn)對(duì)很多人有所幫助锥余。

藍(lán)晨鈺(@晨鈺Lancy)是猿題庫 iOS 客戶端的負(fù)責(zé)人哈恰,他主導(dǎo)了猿題庫 iOS 客戶端從 Objective-C 到 Swift 的遷移工作蛔钙。同時(shí)他在實(shí)踐 Swift 的過程中吁脱,總結(jié)了不少心得兼贡,這次他將會(huì)在 GMTC 大會(huì)上分享這方面的話題遍希,以下是我對(duì)他的采訪,希望對(duì)大家有幫助废封。

提問

問題:向讀者簡(jiǎn)單介紹一下自己吧漂洋。

我叫藍(lán)晨鈺,iOS 開發(fā)者爽冕,11 年開始接觸 iOS 開發(fā)颈畸,13 年加入猿題庫負(fù)責(zé) iOS 客戶端開發(fā)工作眯娱,和猿題庫一起經(jīng)歷了從無到擁有數(shù)千萬用戶的成長(zhǎng)试伙,和我的團(tuán)隊(duì)一起完成了數(shù)十個(gè)版本的迭代疏叨。

我從 14 年底 Apple 發(fā)布 Swift 語言開始一直關(guān)注和學(xué)習(xí)其知識(shí)理念蚤蔓,并在 15 年初在公司推廣和實(shí)踐 Swift 項(xiàng)目,至今在生產(chǎn)環(huán)境實(shí)踐 Swift 已經(jīng)超過一年吐辙,算是有比較豐富的移動(dòng)客戶端開發(fā)經(jīng)驗(yàn)和 Swift 編程經(jīng)驗(yàn)吧昏苏。個(gè)人對(duì) Swift 語言的持樂觀態(tài)度,在公司內(nèi)積極推進(jìn) Swift 語言的實(shí)踐,也非常享受 Swift 的編程體驗(yàn)句柠。

問題:聽說你這次打算在 GMTC 上分享的話題是:《當(dāng)泛型遇上協(xié)議 —— Generic Programming with Protcol in Swift》,能簡(jiǎn)單介紹一下為什么選這個(gè)主題嗎谜酒?

泛型編程和面向協(xié)議編程都是 Objective-C 語言所沒有的特性僻族,作為一個(gè)老 iOS 開發(fā)者來說蝌数,當(dāng)我第一次接觸它們時(shí)顶伞,我的內(nèi)心是激動(dòng)的,我迫不及待的想知道锨咙,這些個(gè)新特性新技術(shù)蓖租,會(huì)給我們的程序和開發(fā)帶來怎么樣的變化。而經(jīng)過我們團(tuán)隊(duì)的不斷學(xué)習(xí)和實(shí)踐稠茂,我們也的確在這當(dāng)中找到了很多樂趣,積累了不少經(jīng)驗(yàn)电爹,我希望能通過這次分享講它們分享給更多人丐箩。

問題:你怎么看待泛型編程和面向協(xié)議編程在客戶端編程的未來?

泛型編程是許多現(xiàn)代語言所有的特性概漱,在其他語言的實(shí)踐經(jīng)驗(yàn)告訴我們竿裂,泛型是一個(gè)強(qiáng)大的工具铛绰,經(jīng)常能有效的提高編程效率和提高代碼的復(fù)用程度。面向協(xié)議編程則是由 Swift 提出的編程范式这嚣,強(qiáng)大的表達(dá)力和抽象能力姐帚,毫無疑問會(huì)變成一項(xiàng)重要工具。而這兩者的結(jié)合則是一種全新的體驗(yàn)九秀,這也是我這次分享的一個(gè)重要部分鼓蜒。

同時(shí),由于 Swift 語言缺乏類似 objc runtime 的機(jī)制畅厢,我認(rèn)為泛型編程和面向協(xié)議編程作為實(shí)現(xiàn)之前 runtime 所實(shí)現(xiàn)功能的替代,將越來越成為 iOS 開發(fā)者需要掌握的重要技能。

問題:猿題庫當(dāng)前對(duì) Swift 的使用到什么程度?已經(jīng)完全遷移到 Swift 了嗎庐杨?

猿題庫有兩個(gè)客戶端項(xiàng)目选调,分別是老師端和學(xué)生端,他們都是 Swift 和 Objective-C 混編的項(xiàng)目灵份,并沒有完全遷移到 Swift仁堪。其中猿題庫老師端是在 Swift 發(fā)布之后不久啟動(dòng)的項(xiàng)目,我們?cè)谶@個(gè)項(xiàng)目中開始推行 Swift 語言填渠,所以這個(gè)項(xiàng)目是一個(gè) Swift 語言為主的項(xiàng)目,Objective-C 部分主要為復(fù)用舊代碼氛什。

而猿題庫學(xué)生端是我們的主項(xiàng)目莺葫,這個(gè)項(xiàng)目從 iOS 5 時(shí)代開始,一直使用 Objective-C 編寫枪眉,直到近期 Swift 升到 2.x 之后捺檬,我們認(rèn)為 Swift 已經(jīng)足夠成熟,并且我們?cè)诶蠋煻酥蟹e累了足夠的經(jīng)驗(yàn)后才開始向 Swift 遷移的贸铜。目前學(xué)生端的項(xiàng)目中堡纬,大部分還是 Objective-C 語言實(shí)現(xiàn),但新實(shí)現(xiàn)的頁面和功能基本都使用 Swift 語言來編寫蒿秦。

問題:你認(rèn)為猿題庫大概還需要多長(zhǎng)時(shí)間能夠完全遷移到 Swift?

事實(shí)上烤镐,在生產(chǎn)環(huán)境中,幾乎沒有人愿意在收益甚微的情況下把 Objective-C 代碼重寫一次渤早,因?yàn)橹貙懸馕吨罅康难邪l(fā)資源和測(cè)試資源的消耗职车,而這基本不會(huì)產(chǎn)生實(shí)際意義上的產(chǎn)品收益。另外 Apple 在 Swift 和 Objective-C 的橋接上做了相當(dāng)多的努力鹊杖,大部分情況下悴灵,我們都可以不太費(fèi)力的在 Swift 中復(fù)用 Objective-C 代碼。

所以大部分公司的策略都會(huì)是新功能用 Swift 語言實(shí)現(xiàn)骂蓖,舊功能先維持現(xiàn)狀积瞒,等到產(chǎn)品變動(dòng)或是架構(gòu)變動(dòng)的時(shí)候再使用 Swift 語言實(shí)現(xiàn),這也是猿題庫所采用的策略登下。所以我想短時(shí)間內(nèi)不太可能完全遷移到 Swift 吧茫孔。如果非要說一個(gè)時(shí)間的話,我推測(cè)大約一年之后大部分業(yè)務(wù)應(yīng)該會(huì)遷移到 Swift被芳,而整個(gè)項(xiàng)目徹底遷移恐怕就需要兩到三年以上了缰贝。

問題:你認(rèn)為 Swift 什么時(shí)候能夠達(dá)到 ABI 穩(wěn)定?

老實(shí)說畔濒,我也不知道剩晴。Swift 的發(fā)展很快,我這次主題要講的泛型相關(guān)的實(shí)踐,在 Swift 1.x 的時(shí)候就沒法實(shí)現(xiàn)赞弥。Swift 項(xiàng)目組的 Chris Lattner 也公開表示 Swfit 3.0 不會(huì)達(dá)到 ABI 穩(wěn)定并且會(huì)缺少一些重要的泛型功能毅整。我們只能期待在 Swift 3.x 或 Swift 4 的時(shí)候會(huì)有驚喜吧。

問題:對(duì)比 Swift 和 Objective-C绽左,你覺得 Swift 最大的優(yōu)勢(shì)是什么悼嫉?

Swift 的優(yōu)勢(shì)有很多,我比較喜歡的有幾點(diǎn):更安全的類型拼窥,代表更少的 Bug 和更低的崩潰率戏蔑;更簡(jiǎn)潔的語法,代表更少的代碼和更快的編程速度闯团;強(qiáng)大的函數(shù)式辛臊、泛型、協(xié)議等特性房交,代表更能發(fā)揮程序員的想象力彻舰。選一個(gè)的話,我選最后一個(gè)候味,強(qiáng)大的特性給了我很大的編程愉悅感刃唤。

問題:對(duì)于從 Objective-C 遷移到 Swift,你有遇到什么值得分享的坑嗎白群?

從 Objective-C 遷移到 Swift 代表著在很長(zhǎng)一段時(shí)間內(nèi)都是處于混編的狀態(tài)尚胞,這里我認(rèn)為最重要的經(jīng)驗(yàn)是一定要有一個(gè)遷移的規(guī)范和指南來約束開發(fā)團(tuán)隊(duì)哪些部分需要遷移 Swift 而哪些部分不要,接口應(yīng)該如何設(shè)計(jì)才能兼顧混編調(diào)用帜慢。舉個(gè)例子笼裳,由于 Swift 調(diào)用 Objective-C 是方便的可靠的,反之則有許多的限制粱玲,所以設(shè)計(jì)接口的時(shí)候躬柬,需要考慮這個(gè)模塊會(huì)不會(huì)被 Objective-C 調(diào)用,如果是的話抽减,應(yīng)該避免使用 Swift 語言的特性允青,又或是制定一套規(guī)則,來 Swift 語言的接口如何轉(zhuǎn)成 Objective-C 兼容的接口卵沉。

問題:對(duì)于學(xué)習(xí) Swift颠锉,你有什么推薦的方法或資料嗎?

iBooks 上有 Apple 推出的 Swift Programming 系列書籍是所有 iOS 開發(fā)者的必讀和參考書目史汗。iTunes U 上有 Stanford 的 Developing iOS Apps with Swift琼掠,講師是 Apple 工程師 Paul Hegarty,推薦新入門的 iOS 開發(fā)者學(xué)習(xí)停撞。

Objc.io 上的 Advanced Swift 是我最近在讀的書瓷蛙,內(nèi)容絕對(duì)對(duì)得起 Advanced 這個(gè)詞,推薦有一定基礎(chǔ) Swift 開發(fā)者閱讀。此外 Github 上有大量的 Swift 開源項(xiàng)目速挑,可以閱讀源碼來學(xué)習(xí)。

最后副硅,也是最重要的姥宝,多寫,多想恐疲,實(shí)踐是最好的學(xué)習(xí)方式腊满。

問題:你對(duì)今年 WWDC 有什么期待嗎?

最大的期望是能去一次 WWDC(笑)培己,可惜我們公司每年到 6 月高考的時(shí)候就是最忙的時(shí)候碳蛋,所以這個(gè)愿望只能等以后了。對(duì) WWDC 本身的話省咨,期望 Apple 能弄出一些新東西肃弟,比如我很看好的虛擬現(xiàn)實(shí)相關(guān)的產(chǎn)品和技術(shù)。

另外希望 Apple 能加快 Swift 的推進(jìn)零蓉,比如發(fā)布與 Google 合作推進(jìn) Swift 語言在 Android 客戶端的應(yīng)用之類笤受。

原文鏈接:http://blog.devtang.com/2016/05/24/migrate-from-oc-to-swift/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市敌蜂,隨后出現(xiàn)的幾起案子箩兽,更是在濱河造成了極大的恐慌,老刑警劉巖章喉,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汗贫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡秸脱,警方通過查閱死者的電腦和手機(jī)落包,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撞反,“玉大人妥色,你說我怎么就攤上這事《羝” “怎么了嘹害?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吮便。 經(jīng)常有香客問我笔呀,道長(zhǎng),這世上最難降的妖魔是什么髓需? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任许师,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘微渠。我一直安慰自己搭幻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布逞盆。 她就那樣靜靜地躺著檀蹋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪云芦。 梳的紋絲不亂的頭發(fā)上俯逾,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音舅逸,去河邊找鬼桌肴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛琉历,可吹牛的內(nèi)容都是我干的坠七。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼善已,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼灼捂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起换团,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤悉稠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后艘包,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體的猛,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年想虎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卦尊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舌厨,死狀恐怖岂却,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情裙椭,我是刑警寧澤躏哩,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站揉燃,受9級(jí)特大地震影響扫尺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炊汤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一正驻、第九天 我趴在偏房一處隱蔽的房頂上張望弊攘。 院中可真熱鬧,春花似錦姑曙、人聲如沸襟交。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婿着。三九已至,卻和暖如春醋界,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背提完。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工形纺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徒欣。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓逐样,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親打肝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脂新,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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