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将开始缩小,上面列出的所有三个问题都将得到减少。但是,至少到目前为止,您确实确实需要两者。

您应该学习SwiftUI,UIKit还是同时学习两者?相关推荐

  1. 学习iPhone UIKit 9

    学习iPhone UIKit 9 1.操作表中的控件: - (void)buttonDidPush {     UIActionSheet* sheet = [ [ [ UIActionSheet a ...

  2. iOS学习——Quartz2D学习之UIKit绘制

    iOS学习--Quartz2D学习之UIKit绘制 1.总述 在IOS中绘图技术主要包括:UIKit.Quartz 2D.Core Animation和OpenGL ES.其中Core Animati ...

  3. 深度学习 免费课程_深入学习深度学习,提供15项免费在线课程

    深度学习 免费课程 by David Venturi 大卫·文图里(David Venturi) 深入学习深度学习,提供15项免费在线课程 (Dive into Deep Learning with ...

  4. PHP学习课程和培训方向学习路线分享

    PHP学习课程和培训方向学习路线分享 php语言的优越性,集结了很多的开发爱好者,无论行业前景和个人发展来说,php正飞速的发展,php在不断兼容着类似closures和命名空间 等技术,同时兼顾性能 ...

  5. 大夏书系·学习共同体:走向深度学习

    作者:陈静静 著 出版社:华东师范大学出版社 品牌:华东师范大学出版社 出版时间:2020-06-01 大夏书系·学习共同体:走向深度学习 ISBN:9787576001969

  6. 深度学习经典教程:深度学习+动手学深度学习

    作者:[美] Ian,Goodfellow(伊恩·古德费洛),[加] Yoshua,Bengio(约书亚·本吉奥)等 出版社:人民邮电出版社 品牌:异步图书 出版时间:2019-06-01 深度学习经 ...

  7. 从神经元到神经网络、从神经网络到深度学习:神经网络、深度学习、神经元、神经元模型、感知机、感知机困境、深度网络

    从神经元到神经网络.从神经网络到深度学习:神经网络.深度学习.神经元.神经元模型.感知机.感知机困境.深度网络 目录 从神经元到神经网络.从神经网络到深度学习 神经网络:

  8. 费曼学习法与孔子温故知新学习法为两大重要学习法,前者外向表现,后者内省提升

    费曼学习法与孔子温故知新学习法为两大重要学习法,前者外向表现,后者内省提升 附前者链接 https://blog.csdn.net/wo541075754/article/details/101554 ...

  9. 深度学习不得不会的迁移学习Transfer Learning

    http://blog.itpub.net/29829936/viewspace-2641919/ 2019-04-18 10:04:53 目录 一.概述 二.什么是迁移学习? 2.1 模型的训练与预 ...

  10. Bengio、Hinton的不懈追求——深度学习算法揭示大脑如何学习

    来源:AI科技评论 编译:Don 校对:青暮 "如果我们能够揭示大脑的某些学习机制或学习方法,那么人工智能将能迎来进一步的发展,"Bengio如是说. 深度学习依赖于精妙设计的算法 ...

最新文章

  1. MPB:邓晔、王尚等-​环境样本中的细菌总量测定—流式细胞法
  2. R语言临床预测模型的评价指标与验证指标实战:自定义的综合判别改善指标(Integrated Discrimination Improvement, IDI)函数
  3. 构建linux下的web服务器
  4. vue中动态渲染组件
  5. 数据中心电池室管理之经济实用性方法的探索
  6. 【待续】C数据结构2.3-顺序表之插入算法
  7. 调查:Blackberry开发者中国大版图
  8. 30岁,我从前端转型管理成功了
  9. neo4j各个版本下载
  10. OpenGl读取导入3D模型并且添加鼠标移动旋转显示
  11. C++ 读取wav文件中的PCM数据
  12. Canonical通过Flutter启用Linux桌面应用程序支持
  13. TIA博途中如何通过Prodiag功能制作报警并显示在HMI上?
  14. 移动支付模式再添新军:指纹支付
  15. BeautifulSoup说明
  16. HQL语句的基本语法和使用
  17. DirectFB代码导读
  18. 目前常见的大数据分析软件有哪些?
  19. html 盒子模型添加图片,[HTML/CSS]盒子模型,块级元素和行内元素
  20. Leetcode1189. “气球” 的最大数量(C++思路与代码)

热门文章

  1. PostgreSQL11.2下载
  2. 通讯录管理系统(C语言版)
  3. 5款十分小众,却又非常好用的良心软件
  4. 关于实时推送系统的那点事
  5. 解决Ubuntu下博通网卡驱动问题
  6. linpack测试软件,服务器性能测试(linpack,stream,netperf,iometer)
  7. 使用Enterprise Architect设计数据库-赋操作截图
  8. 爱康科技压力大:前三季亏损1.2亿,中泰证券喊话全年净利3.92亿
  9. 数学建模投入产出应用实例 matlab,MTLAB在数学建模中的应用
  10. D3.js学习笔记七:多系列折线图与图例