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

最近有些朋友向我咨询一个问题:关于学习Swift时是选择学习SwiftUI还是UIKit的问题?哈哈!你是不是也在期待着这种回答:全部使用SwiftUI是否可行?或者完全不涉及UIKit的问题?然而,在听了这样的建议后,请注意这可能意味着在当前阶段甚至未来一到两年内你可能只是用于个人娱乐或测试的小项目。
在解释之前,请注意以下几点:SwiftUI无疑是一个功能强大的用户界面框架,并且必定会成为所有平台应用开发的趋势。然而,在开发一个商业级别的应用程序时,也仍然要求开发者对UIKit有深入的理解和掌握。
实际上,不选择现在all in是有以下三个方面的考虑:
- API覆盖有限
 - 兼容性有限
 - 社区支持有限
 
API覆盖有限
当下而言,无论你是打算开发企业级应用还是用于个人项目,SwiftUI在API支持方面相对缺乏
举个例子来说吧,在iOS开发中我们通常使用 UICollectionView来实现网格视图功能但SwiftUI却没有提供类似的控件。或者你希望用户提供多行输入功能在UIKit中我们会使用UITextView来实现这非常简单但在SwiftUI中却难以找到对应的解决方案有时会让人感到非常沮丧比如说在List视图的分割线缩进设置或者给Alert弹框添加文字输入框这些看似简单的功能在iOS开发中往往只需要一行代码就能轻松搞定然而到了SwiftUI这边却显得力不从心令人感叹这就是差距所在
举个栗子吧比如说你想在一个组件里显示多个信息条有时候你需要手动计算字体大小以适应屏幕比例而SwiftUI在这方面似乎缺乏灵活性导致很多开发者不得不手动处理这些细节这也是一种无奈的选择
并未为这些与UIKit一一对应的API提供接口。更可能是故意为之——更可能是故意为之
但我也坚信,在每次 SwiftUI 的更新中都会新增更多的 API 供我们调用,并极大地方便我们的使用。
兼容性有限
SwiftUI是一种新兴的框架,在WWDC2019发布以来逐渐推出,并且仅限于运行iOS13或更高版本的操作系统上使用
目前所有的APP几乎都是UIKit系的。
各类APP在应用兼容性方面要求较高,在过去的一年乃至更久的时间里想要全面采用SwiftUI框架也需要仔细斟酌一番
你别急着下结论哦!苹果可没少花心思啊!他们投入了巨大的资源去推动UIKit的发展,并最终实现了其如今的规模与成熟度。而且现在使用UIKit的人已经习惯了这种开发模式,并且已经习惯了这种开发流程。苹果估计他们不愿意让任何人放弃使用这个框架而转向SwiftUI吧?任何新事物的发展和完善都需要经历一个渐进的过程吧?苹果希望未来 SwiftUI 能达到这样的高度吗?只有坚定地走下去才能确保 Swift 的天下吧!
社区支持有限
UIKit的社区距今已经发展十年有余,这就意味着:
- 在开发过程中遇到的疑难问题几乎都有人解决过。
 - Uikit中有众多成熟的第三方框架可供使用。
 - 此外还有许多其他的优势。
 
初入行的朋友们可能会觉得那些资深开发者把所有关于UIKit的知识都装进了他们的大脑里吗?哈哈!实际上呢,并非如此。他们更像是百度、Google和Stack Overflow的忠实 users,在面对问题时总是能够游刃有余地解决各种挑战。因为一个人的力量终究有限,在这个拥有成熟支持网络的地方,问题似乎总能找到答案。另外值得一提的是,高效信息检索同样是一项专业技能哦!
再次提及SwiftUI, 可以说它还处在初级阶段. 当你在开发过程中遇到问题时, 费尽心思地尝试各种方法去操作, 结果却是毫无价值的一片空白. 不得不感叹它的难度, 像新手 developers 对于刚接触 programming 的情景. 然而, 如果恰好凭借自己的智慧解决了这个问题并回馈给社区, 那么你无疑完成了一件值得骄傲的事情.
所以,说了这么多我不应该上手SwiftUI?
明确且坚定的回答:不!SwiftUI确实是一个非常有趣且引人注目的新工具。它甚至能够轻松地生成令人惊叹的作品。我也编写了一系列从入门到深入的文章——旨在帮助大家更快、更高效地掌握SwiftUI。如果我认为这个工具没有实际价值...
我想表达的是,在完全取代苹果的 SwiftUI 看来是不可能实现的目标下,在其真正成为主流产品之前,请问我们需要如何做?为了稳妥起见,请问我们应该如何布局? youngsters(年轻一代)是否就是舞台上的最耀眼的存在?我们需要不断学习和研究 SwiftUI ,不能放松对它的深入研究和学习。
好了啦!还有一个需要注意的问题:有些同学可能会拿Flutter来挑刺!他们会觉得未来Fluent将主导一切——无论是跨平台还是跨端的世界。但现在的问题是:苹果系统是否是封闭的?而安卓系统的开放性则完全不同!既然我们能在Apple生态体系中实现跨平台应用(全栈开发),那么我们是否也可以实现跨端的应用(全栈开发)呢?这个问题本身就很有意思——毫无疑问,在技术实力上苹果与谷歌不分上下!
诚挚地邀请各位大佬订阅我们的微信公众号:iOS进化论。
每天微小的进步如同积雪终将汇聚成江河,请大家每天努力。
让自己朝着更好的方向每一天迈进。
诚挚地邀请各位大佬订阅我们的微信公众号:iOS进化论。
每天微小的进步如同积雪终将汇聚成江河,请大家每天努力。
让自己朝着更好的方向一步一步前进。

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

