2020年我们应该学习UIKit还是SwiftUI
去年在WWDC19上首次宣布时,SwiftUI感到非常年轻。 它显示了一个有希望的未来,但它在这里和那里都有着粗糙的边缘,很难预测一年后的情况。 一年过去了,这就是我对苹果公司新的声明式UI框架SwiftUI的看法。
差距越来越近
我们对SwiftUI的争论总是像是“您不能在SwiftUI中执行x(UIKit功能)”。 今年,苹果展示了SwiftUI开发的惊人速度。 去年缺少的UI元素已经具有SwiftUI副本,例如UIColelctionView和UITextField已经具有LazyH / VGrid和TextEditor的SwiftUI副本。
头等公民
看来SwiftUI不再只是UIKit的视图了。 现在,您可以使用纯SwiftUI编写整个应用程序。
以下是有效的SwiftUI应用程序代码。
import SwiftUI
@main
struct SwiftUIApp: App {
var body: some Scene {
WindowGroup {
Text("Hello! SwiftUI")
}
}
}
上面的代码不仅适用于iOS,而且相同的代码可以构成iPad和Mac应用程序。 您可以完全使用SwiftUI编写多平台应用程序。 似乎SwiftUI的概念比我最初想象的要强大得多。
独家交易
WidgetKit是iOS 14中用于编写Widget的新框架,只能使用SwiftUI进行编写。 这意味着您无法逃避它,即使您喜欢UIKit,似乎也别无选择,还必须学习SwiftUI。
UIKit会死吗?
不,这还远远没有结束。我认为苹果没有计划在可预见的将来放弃UIKit。在UIKit上工作多年后,SwiftUI对我来说就像魔术。它可以使用单行代码(或者因为内置于SwiftUI中而无需编写代码)来复制UIKit函数。魔术的坏处是,当事情进展不理想时,很难找出问题所在,也可能无法修复。那是您需要返回UIKit的时候。 UIKit是iOS的基础,而Apple仍在继续向其中添加新功能(UICollectionView和UISplitViewController今年有很多很酷的功能,您应该检查一下)。
我将UIKit视为所有SwiftUI魔术背后的秘密调味料。 UIKit和SwiftUI都有其优势,Apple选择了合适的工具来完成正确的工作(它们将SwiftUI用于WidgetKit,因为它适合Widget现在具有的约束)。我认为这两个将并存很长时间。
苹果公司将多年的UIKit和工具经验用于SwiftUI。一起工作很愉快,并且结果令人惊讶。苹果之所以能够做到这一点,是因为他们建立了一种将SwiftUI桥接到UIKit的方法,因此他们知道,即使SwiftUI无法完成某些任务,总会有UIKit存在。
结论#
重要的问题到了。您应该学习UIKit还是SwiftUI?
我的简短答案是SwiftUI。
这是我的长答案。从我在本文中指出的所有事实来看,SwiftUI现已准备就绪。我认为最终您将学习两者。
如果您了解UIKit,您将被迫学习SwiftUI,因为它是WidgetKit等新框架所独有的。即使不是出于这个原因,我想您可能也是最欣赏SwiftUI的人。 SwiftUI可以开箱即用地完成很多伟大的事情,这是我们一直希望在UIKit中做的事情,但是没有机会和时间去做。
如果您了解SwiftUI,那么有时您需要额外的自定义或遇到一些障碍,UIKit将永远为您服务。
原文地址
https://sarunw.com/posts/should-i-learn-uikit-or-swiftui/
推荐
基础文章推荐
经典教程推荐
技术源码推荐
推荐文章
CoreData篇
Combine篇
TextField篇
- 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源码)》
- 《SwiftUI实战之TextField风格自定义与formatters》
- 《SwiftUI实战之TextField如何给键盘增加个返回按钮(隐藏键盘)》
- 《SwiftUI 当键盘出现时避免TextField被遮挡自动向上移动》
- 《SwiftUI实战之TextField如何给键盘增加个返回按钮(隐藏键盘)》
JSON文件篇
一篇文章系列
- SwiftUI一篇文章全面掌握List(教程和源码)
- 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源码)》
- SwiftUI一篇文章全面掌握Picker,解决数据选择(教程和源码)
- SwiftUI一篇文章全面掌握Form(教程和源码)
- SwiftUI Color 颜色一篇文章全解决
技术交流
QQ:3365059189
SwiftUI技术交流QQ群:518696470
- 请关注我的专栏icloudend, SwiftUI教程与源码
https://www.jianshu.com/c/7b3e3b671970