我到底应该学SwiftUI?UIKit?还是both?

我到底应该学SwiftUI?UIKit?还是both?
最近有些朋友问我,我学Swift到底应该学SwiftUI还是UIKit也要学?哈哈,你是不是也在期待着这样的回答:all in SwiftUI吧,UIKit的内容不用管了!然鹅,如果你听了这话,那目前阶段甚至一两年内你都可能只是写一写玩玩的项目了。各位看官,且听我细说为啥不能all in SwiftUI吧。

在解释之前,我需要说明一点:SwiftUI毫无疑问是一个很优秀的用户界面框架,而且100%会成为苹果所有平台开发的未来。但是,目前编写一个商业级的APP,依然需要你对UIKit的知识有足够的了解。

实际上,不选择现在all in是有以下三个方面的考虑:

  • API覆盖有限
  • 兼容性有限
  • 社区支持有限

API覆盖有限

就目前来说,不管你是想做企业级应用还是做自己的业余项目,其中一个掣肘的点是SwiftUI的API提供不如UIKit的丰富。

举个栗子,如果你想做一个商品展示的网格视图,在UIKit中我们会选择UICollectionView实现,但是SwiftUI并没有提供相同的控件;又或者你想让用户可以多行输入,UIKit中你会使用UITextView,但是在SwiftUI中也没有。有时间你会感觉很心累,在UIKit中很常见的功能在SwiftUI中不是很难实现就是做不到,比如设置列表视图的分割线缩进?比如给alert弹框添加一个文字输入框?这在UIKit中就一行代码的事,SwiftUI说臣妾做不到啊!奔溃!

当然没有提供这些和UIKit一一对应的API,并不是苹果公司的开发小哥们懒,更像是他们故意为之:他们没有一次性的发布所有API的包装器,然后再不断的修改,而是采取更加谨慎的方式,即增量添加API。这种方式的好处是显而易见的:在未来版本迁移上会非常的简单,而且这也给了苹果的工程师们更多的时间打磨这些不成熟的API。

不过我坚信,在后续每一次SwiftUI的更新中,都会有更多的API添加进来,方便我们的使用。

兼容性有限

SwiftUI毕竟是WWDC2019才提出的新新新的框架,而且只能在iOS13及以后的系统中可用,这就意味着:

目前所有的APP几乎都是UIKit系的。

所有的APP都需要兼容n-1到n-2甚至更多的版本,最近这一年甚至更远,想完全使用SwiftUI都需要思量一下。

你想想,苹果花费了那么大的力气,那么多的money把UIKit搞到如今的规模和成熟度,而且现在使用UIKit的人,都已经很习惯了这样的开发套路,代码撸的也很带劲,苹果自己估计都不愿意让所有人抛弃UIKit不用而转战SwiftUI。任何新事物的发展完善都需要一个过程,想达到UIKit目前的地位,SwiftUI可能还有很长的路要走,但坚定一点就是未来一定是Swift,SwiftUI的天下!

社区支持有限

UIKit的社区距今已经发展十年有余,这就意味着:

  • 你开发中所遇到的所有疑难杂症,都有人遇到过并成功解决,你遇到一个没有人见过的问题的概率无限趋0.
  • UIKit中有很多成熟的三方,可以让我们避免重复造*,还不一定造的比人家好。
  • 当然还有很多的优势。。。

一些初入行的同学可能会觉得那些经验丰富的大神都把所有的UIKit装进了脑子里,哈哈,其实我告诉你不是的,实际上他们也是百度,Google,Stack Overflow的重度依赖者。毕竟一个人的力量有限,但是拥有一个成熟的社区,那所有的问题似乎都可以迎刃而解。这里也很有必要提一句,有效信息的检索也是一门技术活,需要不断的摸索哦。

再说回到swiftUI,这就是个新生儿啊,如果你在开发中遇到了问题,使出浑身解数一顿操作,却发现找不到一条有价值的结果,恭喜你,你就是这个问题的妈,就像妈妈总是第一个见到自己初生的孩子一样。这其实挺有趣,如果你恰好通过自己的聪明才智解决了这个,并回馈给社区,那你就做了一件了不起的事哦。

所以,说了这么多我不应该上手SwiftUI?

首先肯定的回答,NO! SwiftUI是一个很有趣的新东西,它也可以很容易的创建一些惊艳的东西。我也这一系列入门到深入的文章,也是为了大家更快更好的上手SwiftUI,如果我觉得它没有价值,我吃饱了撑的搞这些哦。

其实我想表达的是,虽然目前完全取代UIKit是不现实的,但是在这成为现实之前,我们是不是应该未雨绸缪,抢占先机,这样等到它真的成为主流,我们是不是就是舞台上最耀眼的那个崽?你需要为未来做好准备,但是当下对于UIKit的深入也不能停歇,那你说我没有那么多时间去找那些SwiftUI的资料学习,没关系,关注我啊(此处请允许我不要脸一下)带你飞!

对了,还有一个事需要说明,有些同学可能要拿Flutter来说事了,说以后都是Flutter的天下,跨平台、跨端的天下,但是你有没有想过,苹果是个封闭的系统,但是安卓不是啊,既然苹果可以做到苹果系的跨平台,那是不是也完全可以做到跨端?全栈?哈哈,我仿佛已经看到谷歌和苹果的全平台开发语言大战,我相信苹果绝对有实力和谷歌掰掰手腕的。

欢迎各位大佬关注微信公众号:iOS进化论。每天进步一点点,成为更好的自己!
我到底应该学SwiftUI?UIKit?还是both?