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 听起来很美好,但是写起来缩进看的快吐了。

推荐
内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/simplepp/p/13043113.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!