最近有些朋友问我,我学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进化论。每天进步一点点,成为更好的自己!

关注公众号iOS进化论,回复“干货”,就会得到很多干货资源哦,笔芯。

我到底应该学SwiftUI?UIKit?还是both?相关推荐

  1. 谷歌无人车之父刚推出的“无人驾驶入门”课,到底能学到啥?

    作者 | 鸽子 谷歌无人车之父要亲自给小白讲授无人驾驶了. 近日,Udacity创始人 Sebastian Thrun 在 TechCrunch Disrupt 上宣布两门全新的重磅课程:" ...

  2. python培训出来的有公司要吗-参加Python培训到底需要学什么?好程序员

    原标题:参加Python培训到底需要学什么?好程序员 参加Python培训到底需要学什么?好程序员,参加Python培训到底需要学什么?在选择靠谱的北京Python工程师培训之前,你自己也要对Pyth ...

  3. 机器学习和深度学习到底怎么学?顶尖专家吴恩达告诉你

    机器学习和深度学习到底怎么学? 在外国版知乎上,有位网友问:新手如何学习机器学习?学习完MOOC的课程后有没有能力阅读研究论文或者真正的做出一点研究成果? 这个困惑很多人的问题吴恩达给出了详细的回答, ...

  4. 小游戏编程代码复制_少儿编程是不是来玩游戏?这个到底要学多久?

    点击上方关注我们! 中小学生游戏低龄化越来越严重,经常看到五六岁的孩子抱着手机整天玩游戏,有些家长也苦恼不已.好些家长以为编程就是玩游戏,相反,我们就是希望青少年不要过度沉迷网络游戏,所以让他们了解游 ...

  5. 知乎Live上线-学深度学习我们到底在学什么

    文章首发于微信公众号<有三AI> 知乎Live上线-学深度学习我们到底在学什么 文/编辑 | 言有三 很简单,今天就是预告一下我的知乎Live,将在3-30 12:00开讲,地址如下: h ...

  6. Web前端到底需要学什么?应该怎么学?

    随着互联网的深入发展,Web前端开发工程师一跃成为市场上非常抢手的人才.很多同学,包括以前做UI的.Java的.或者对于IT完全零基础的同学都想学习Web前端.那么Web前端到底需要学什么?Web前端 ...

  7. web前端 到底怎么学?掌握什么可以拿到高薪?

    web前端到底怎么学? 那么在讲 web前端怎么学 这个大命题之前呢,依据我本人的尿性,还是得先把你拉入坑,让你在坑里好好学 O(∩_∩)O web前端的历史渊源 和一些出处,童鞋们大概都有所了解了. ...

  8. web前端到底怎么学?干货资料!

    hi,大家好! 我的第一篇文章:[web前端到底是什么?有前途吗?],在我没想到如此 'HOT' 的情况下 得到很多好评和有效传播. 也为我近期新开的 个人前端公众号:前端你别闹(webunao) 直 ...

  9. 程序员到底应该学什么?!

    以前听别人说大公司和小公司在招牌上的差异,自己总是不信,总是沿着自己设计的路一直走,直到碰壁了,才终于醒悟!所以在此以一个过来人的身份再说:大公司和小公司在招聘上的差异,程序员到底应该学什么!可能没有 ...

最新文章

  1. python 词云手把手_手把手教你生成炫酷的词云
  2. Jenkins项目迁移
  3. 【转载】android程序报找不到Application
  4. 【pytorch】torch.meshgrid()==>常用于生成二维网格,比如图像的坐标点
  5. 在SQL SERVER 中如何备份和恢复单个表?
  6. 常用校验算法CRC、MD5、SHA_转
  7. php输出cad文件,AutoCAD 二次开发 输出为WMF 或BMP文件
  8. 【C语言】从你好世界开始
  9. 怎么用java打开.jar文件
  10. hexo博客yilia主题作者名字的更改
  11. 第三方登入时昵称出现emoji表情致mysql插入失败
  12. 程序员小故事-战术上的勤奋和战略上的懒惰
  13. 《黑匣子思维:我们如何更理性地犯错》ipad部分
  14. 寻找亲和数对C语言,寻找亲和数
  15. 生物素标记甾体化合物/多杀菌素探针分子/壳聚糖/聚乙二醇偶连基团为华生物提供
  16. 微信搭建本地开发测试环境
  17. html 让其中一个div浮在另一个div上面
  18. 【抽象代数】第一章 代数系统《抽象代数极简教程》/ By 禅与计算机程序设计艺术ChatGPT
  19. Krpano雨雪插件使用及下载
  20. Python-Level1-day08:函数

热门文章

  1. mysql 临时表联表查询_Mysql应用MySQL使用临时表加速查询的方法
  2. geek卸载_「工具」Windows 卸载软件,这一个就够了
  3. TensorFlow Object Detection API入门例子 (小浣熊检测上)
  4. 浪矢杂货店,一本很温暖的书
  5. 十分钟计算机说课稿,10分钟说课稿课件.ppt
  6. (VGG)VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
  7. 短视频程序的魅力,你为什么喜欢抖音?知乎大神的回答
  8. ZRobot CEO乔杨:区块链为信用租赁市场带来新变量
  9. 宝塔linux数据盘不够用如何处理,帝国cms使用Linux系统数据盘扩容后宝塔控制面板数据盘大小不变的解决方法...
  10. 释义:Linear temporal logic (LTL)浅析