1.先說現狀 現在國內公司開全新項目,Swift 已經占壓倒性優勢了。 很多以前是 OC 的項目也轉向 OC/Swift 混編了。 但是也有對包大小非常敏感的項目,還是純 OC 開發。不少公司剛剛擺脫 MRC 不久,業務壓力大,歷史包袱重,沒有時間推進新技術。 2. 對比一下 OC 和 Swift ...
1.先說現狀
現在國內公司開全新項目,Swift 已經占壓倒性優勢了。
很多以前是 OC 的項目也轉向 OC/Swift 混編了。
但是也有對包大小非常敏感的項目,還是純 OC 開發。不少公司剛剛擺脫 MRC 不久,業務壓力大,歷史包袱重,沒有時間推進新技術。
2. 對比一下 OC 和 Swift
總的來說,Swift 相對於 OC 來說,是進步的。Swift 有很多好的語言特性,能做更好的抽象。
說 Swift 線上崩潰 線下 Delay 的不怎麼會寫代碼吧?強類型能幫你糾正很多低級錯誤。Swift 不亂用不熟悉的特性,寫起來除了把 []換成.毫無區別,再不濟所有聲明都加上 @objc ,這夠狠了吧,要是還能出問題也稱不上合格的開發者了。
關於 OC 的黑魔法,能玩的也就是 runtime 了, Method/Class Swizzling, AOP,轉發等等。Swift 確實沒有這麼靈活,但是說實話大型項目,category 都不敢亂寫,就別說這些花活了,你寫的黑魔法不知道會影響到誰。要是你的騷操作給別人帶來了 bug,不得被人花式罵死?
我就遇到過兩次,一次是別人 hook 了 UI 組件的方法,我們這邊展示異常,百思不得其解,後來一條一條看調用棧才有了點眉目揪出了問題。
第二次差不多,別人 hook 了 UIAnimation 的方法,但是沒考慮周全,導致了崩潰,也是得看調用棧。
Swift 也有很多靈活的東西可以玩啊,比如方法=閉包,比 OC 那個靈活多了,@selector() 真的很不好用。
還有就是要吐槽 OC 沒有包名,有的時候真的欲哭無淚,無窮無盡的問題。
Xcode 對 Swift 的支持特別不好,代碼提示動不動就沒了,打開混編項目不用打字,放在那風扇就狂轉,續航從 10 小時降到 2 小時。還有最搞笑的,如果聲明一個數組,不顯式的指定類型,那就等著哭吧,編譯器會一個一個元素的去推斷類型,最後得出數組的範型。我試過聲明一個40個元素的數組,然後這個文件編譯了20分鐘。還好這個 bug 現在修掉了。
3. 對比一下 Swift 和 Kotlin
使用下來感覺 Swift 不如 Kotlin。Swift 的 API 不如 Kotlin,比如在可選型解包的的時候,要繁瑣的多。Kotlin 和 Java 能無縫對接,但是 Swift 和 OC 是兩門語言,混編的時候比較痛苦,主要是需要不斷的考慮,我用的特性 OC 支持不支持,這個類要不要暴露給 OC 使用,現在用了高級特性,萬一將來 OC 要調用要怎麼相容,很頭痛。
4. Swift ABI 變動
還拿 ABI 說事的也好多年沒寫代碼了吧?Swift 3 4 5 ABI 變動很小,遷移成本不高。另外 Xcode 會支持當前最新版本以及上一個版本的 Swift,比如現在最新的是 4.0,那 3.0 的代碼也可以編譯。
5. 關於 RN 和 Flutter
RN 有點涼的趨勢,最近蘋果的審核收緊了,RN 有可能被當作熱更新導致 APP 審核被拒了。
Flutter 大家還都是玩票,而且應用下來看崩潰率有點太高了。
另外就是 Dart 。。。。一切皆 widget 聽起來很美好,但是寫起來縮進看的快吐了。