引言
不出所料,Apple在过去一年间给予了SwiftUI极高的重视,本次WWDC也公布了非常多的新内容。
本文主要基于WWDC20 Day2 中对SwiftUI的概览性介绍视频 - 《What‘s new in SwiftUI》,同时结合本人过去一年间对SwiftUI粗浅的探索,对SwiftUI框架第二次main release 进行内容的梳理,主要做后续深入研究的目录使用。
具体内容介绍还请移步[AppleDeveloper官网]
【前排多图预警⚠️】
1. 新的结构性Protocol:App SwiftUI是声明式的,由状态驱动的框架,App组件的增入继续对这一理念进行了强化和扩展。区别于之前只能View 套View 的模式,App表征整个应用,相当于Main()函数,目测将对应用生命周期的全局控制做出巨大影响。
2. 新的项目选项
在Xcode创建Project下新增跨平台项目类型,支持iOS,MacOS 等系统直接适配。具体通过WindowGroup等组件实现适配,可以理解为组件底层自带适配各种系统界面大小的AutoLayout,同代码无缝跨平台。
3. 新的加载界面创建方式
过去一年间,SwiftUI在各种方面都对传统Swift具有较强的依赖。不得不持续使用StoryBoard的LaunchScreen的就是其中之一。但今年显然支持通过SwiftUI独立创建了,而且是通过.plist 的形式。
4. Widgets
关注了第一天KeyNotes的人一定知道,Widgets作为本次系统更新的一大亮点,自然也会在SwiftUI中得以体现。置入的方式同1.所述的 【App】,均为protocol的格式。
5. Complications
理解为系统自发整合的数据集,通过ClockKit等组件,一步完成数据整合到可视化组件创建。
6. 列表类组件的扩展
递归式目录 - Recursive outlines
可滑动表格 - Scrolling Grid
堆叠式视图 - Stack View
What's new for SwiftUI 在容器型组件中主要介绍了以上三类,形式上其实都是对原本就已经存在的视图类型进行实现,但在数据层上实现了延迟加载 - (Lazy Loading)
在之前的SwiftUI版本中,只有List组件能够是自发适配延迟加载、循环利用的,其他的ScrollView统统需要手动进行加载缓冲。这一更新极大程度地完善了SwiftUI体系中的数据加载框架。
7. Toolbar
Toolbar在视图中划分出单独的一块,完善前版本中的组件堆放问题。(试过的都知道之前版本有多反人类 = = ,尤其是NavigationView)
8. SF Symbols 2.0
用过的都说好,不过缺点就是太少了。新版本大幅扩充了icon库,值得期待。截图是1.0版本
9. Label
扩充功能的组件之一,但凡做过前端开发的应该都不陌生。新版本支持直接填充文本和图片。
10. Command
通过.keyboardShortcut: modifier 实现,在iPadOS 和MacOS 中创建应用快捷键。
11. Focus
当前聚焦组件的检测,主要用在macOS 和tvOS上。
12. ProgressView
同样是传统Swift组件之一,之后再也不需要通过Representable 适配了
13. Gauge
范围型标识组件,图中表示为PH值测试(圆圈)
14. Namespace
同一组数据集可以通过.matchGeometryEffect 修饰被划分到不同的View组件中。如图中商量两组图片,支持通过拖动实现的组转移。
15. Text
仍将是主要的文本展示组件,新版本扩展后支持直接在Text中插入Image
16. System Accent Color
应用能够默认应用系统主题色
17. Link - LPLinkView 的SwiftUI化
在原有功能的基础上新增如下功能:
直接跳转至另一App
以Widget的形式贴至桌面
18. SignInWithAppleButton
新版本系统将大范围推广通过苹果账号登陆功能,在SwiftUI中甚至直接将这一行为封装为一个完整的Button
- 总结
说点废话:本次WWDC公布的对SwiftUI的内容上的更新主要能概括为一下两个方面:
对功能进行补足,保证SwiftUI能够尽快在功能实现的范畴上向传统Swift看齐,摆脱臃肿的Representable接合模式,脱离原生Swift独立进行开发。
另一方面,SwiftUI也紧跟Apple各个系统的脚步,完全适配了新系统Widget 等组件。
不必多言,SwiftUI未来必然是iOS开发的主流框架。不光是因为支持实时预览的preview模式将大幅改变移动应用开发中视图层和逻辑层的开发格局。更因为优雅的声明式和状态驱动型框架更加贴合Apple一直以来的理念。