您应该学习SwiftUI,UIKit还是同时学习两者?

Paul Hudson     @twostraws
译自:https://www.hackingwithswift.com/quick-start/swiftui/answering-the-big-question-should-you-learn-swiftui-uikit-or-both

在我问过的所有SwiftUI问题中,有一个比其他任何问题都多:“我正在学习Swift:我应该学习SwiftUI还是我也需要学习UIKit?”

人们似乎想听到的答案是“忘记旧的UIKit了–您应该专注于SwiftUI!”但是,事实很简单,那就是绝大多数人都不会从该建议中获得成功,因此值得详细解释原因。

在开始详细介绍之前,我想澄清一件事:SwiftUI是一个了不起的用户界面框架,并且绝对会100%成为Apple平台上应用程序开发的未来。但是,如果您想今天(或未来一到两年左右的任何时间)构建出色的应用程序,那么您也100%绝对需要UIKit的知识,特别是如果您打算使应用程序开发成为您的职业。

好的,顺便说一句,在忽略UIKit的同时关注SwiftUI的问题归结为三点:

  1. API覆盖范围有限。
  2. 限制采用。
  3. 支持有限。

让我们分解一下...

API覆盖范围有限

无论您是想在公司工作还是在业余时间开发业余爱好应用程序,SwiftUI的一个缺点是它目前不具有与UIKit相同的广泛API覆盖范围。

例如,如果要在网格中显示项目,则可以在UIKit中使用UICollectionView,但是SwiftUI没有等效项。或者,如果您想让用户输入多行文本,则可以在UIKit中使用UITextView,但是SwiftUI也没有等效项。

这并不是苹果公司的懒惰,而是有意为之:他们不是先发布其所有API的包装器,而是不得不稍后进行更改,而是采取更为谨慎的方法并逐步添加API。 (我希望!)这应该减少我们将来看到的重大更改的数量,因为它使Apple的工程师有更多的时间来细化他们打算交付的API子集。

很多时候,您会找到解决方法,但是老实说,当您知道某件事在UIKit中是微不足道的,但在SwiftUI中并非不可能时,这很累。有时甚至是简单的事情:如何更改表格上的分隔符插入?或如何向警报中添加文本框?这些是UIKit中的单行代码,但在SwiftUI中不可用。

随着时间的流逝,我完全希望看到SwiftUI会增加更多功能,使其与UIKit达到同等水平,但现在距离我们还有很长的路要走。

限制采用

SwiftUI仅在WWDC2019上宣布,并且可在iOS 13设备或更高版本中使用。这立即意味着:

迄今为止,几乎所有编写的应用程序都使用UIKit。
需要支持iOS n-1或n-2的任何应用(例如iOS 12和iOS 11)甚至都无法开始切换到SwiftUI一年或更长时间。
这意味着,如果您打算在未来三年内找到一份iOS开发人员的工作,则UIKit经验实际上是必不可少的,因为这是现有代码库所使用的。实际上,我完全希望UIKit在四年后仍将是主导的UI平台。我想没有人-甚至没有苹果! –希望iOS社区能够以任何快速的步伐迁移到SwiftUI。在UIKit应用中投入了大量的代码,大量的时间和大量的资金,并且它拥有漫长而幸福的生活。

有些人试图在采用Swift和采用SwiftUI之间进行区分,但这没有帮助。采用Swift的速度很快,因为它可以在Apple支持的每个框架(UIKit,SpriteKit等)中工作,并且还已经支持iOS n-1,因此许多公司可以立即切换到它。

再一次,我想重申,SwiftUI绝对将成为苹果平台开发的未来,但是要在UIKit级别获得采用将需要很长时间。

同时,SwiftUI是个人应用程序,爱好应用程序,原型应用程序或一般实验的理想选择。如果您有幸加入专门使用SwiftUI的公司,请尽情享受吧!

有限的支持

UIKit已有十多年的历史了,这意味着

a)几乎您可能遇到的每个问题都已经被他人解决

b)那里有许多提供扩展和自定义功能的库。

虽然有些学习者可能会想到高级开发人员会掌握大量UIKit,但简单的事实是,我们所有人都使用Google,Stack Overflow,利用Swift进行黑客入侵等方法来找到问题的解决方案。当您绝望时,这可能实际上是将错误消息粘贴到网站中,但是无论您如何获得答案,它都可以节省大量在线查找错误消息的时间。

SwiftUI仅凭借显着更新而已,可用的解决方案却少得多。实际上,寻找从未有人尝试过的东西很普遍-实际上,您是第一人称。这可能会很有趣,但是如果您有一个实际要交付的实际项目,那也可能会令人沮丧。

所以...您是说我不应该学习SwiftUI吗?
没有! SwiftUI非常有趣,您可以用它来构建奇妙的东西。

我要说的是,SwiftUI的存在并没有以某种方式使UIKit变得过时:如果您打算在未来三年内获得iOS开发工作,那么知道如何使用UIKit将会是一项坚决的要求或者是一项强有力的要求。

因此,直接回答这个问题:是的,应该学习SwiftUI,因为这是在Apple平台上进行应用程序开发的未来,但是您仍然需要学习UIKit,因为这些技能在未来几年中将非常有用。

随着每年的过去,随着SwiftUI的实力,采用和支持的增长,以及随着SwiftUI的增长,UIKit将开始缩小,上面列出的所有三个问题都将得到减少。但是,至少到目前为止,您确实确实需要两者。

猜你喜欢

转载自blog.csdn.net/fzhlee/article/details/112528498