【WWDC20】 Whats New in SwiftUI

引言

不出所料,Apple在过去一年间给予了SwiftUI极高的重视,本次WWDC也公布了非常多的新内容。

本文主要基于WWDC20 Day2 中对SwiftUI的概览性介绍视频 - 《What‘s new in SwiftUI》,同时结合本人过去一年间对SwiftUI粗浅的探索,对SwiftUI框架第二次main release 进行内容的梳理,主要做后续深入研究的目录使用。

具体内容介绍还请移步AppleDeveloper官网
 

【前排多图预警⚠️】
 
 
 

What’s new in SwiftUI

1. 新的结构性Protocol:App

SwiftUI是声明式的,由状态驱动的框架,App组件的增入继续对这一理念进行了强化和扩展。
区别于之前只能View 套View 的模式,App表征整个应用,相当于Main()函数,目测将对应用生命周期的全局控制做出巨大影响。
【WWDC20】 Whats New in SwiftUI

2. 新的项目选项

在Xcode创建Project下新增跨平台项目类型,支持iOS,MacOS 等系统直接适配。
具体通过WindowGroup等组件实现适配,可以理解为组件底层自带适配各种系统界面大小的AutoLayout,同代码无缝跨平台。
【WWDC20】 Whats New in SwiftUI

3. 新的加载界面创建方式

过去一年间,SwiftUI在各种方面都对传统Swift具有较强的依赖。不得不持续使用StoryBoard的LaunchScreen的就是其中之一。
但今年显然支持通过SwiftUI独立创建了,而且是通过.plist 的形式。
【WWDC20】 Whats New in SwiftUI

4. Widgets

关注了第一天KeyNotes的人一定知道,Widgets作为本次系统更新的一大亮点,自然也会在SwiftUI中得以体现。
置入的方式同1.所述的 【App】,均为protocol的格式。
【WWDC20】 Whats New in SwiftUI

5. Complications

理解为系统自发整合的数据集,通过ClockKit等组件,一步完成数据整合到可视化组件创建。
【WWDC20】 Whats New in SwiftUI

6. 列表类组件的扩展

  • 递归式目录 - Recursive outlines
    【WWDC20】 Whats New in SwiftUI
  • 可滑动表格 - Scrolling Grid
    【WWDC20】 Whats New in SwiftUI
  • 堆叠式视图 - Stack View
    【WWDC20】 Whats New in SwiftUI

What’s new for SwiftUI 在容器型组件中主要介绍了以上三类,形式上其实都是对原本就已经存在的视图类型进行实现,但在数据层上实现了延迟加载 - (Lazy Loading)

在之前的SwiftUI版本中,只有List组件能够是自发适配延迟加载、循环利用的,其他的ScrollView统统需要手动进行加载缓冲。这一更新极大程度地完善了SwiftUI体系中的数据加载框架。
 

7. Toolbar

Toolbar在视图中划分出单独的一块,完善前版本中的组件堆放问题。(试过的都知道之前版本有多反人类 = = ,尤其是NavigationView)
【WWDC20】 Whats New in SwiftUI

8. SF Symbols 2.0

用过的都说好,不过缺点就是太少了。新版本大幅扩充了icon库,值得期待。
截图是1.0版本
【WWDC20】 Whats New in SwiftUI

9. Label

扩充功能的组件之一,但凡做过前端开发的应该都不陌生。新版本支持直接填充文本和图片。
【WWDC20】 Whats New in SwiftUI

10. Command

通过.keyboardShortcut: modifier 实现,在iPadOS 和MacOS 中创建应用快捷键。

【WWDC20】 Whats New in SwiftUI

11. Focus

当前聚焦组件的检测,主要用在macOS 和tvOS上。
【WWDC20】 Whats New in SwiftUI

12. ProgressView

同样是传统Swift组件之一,之后再也不需要通过Representable 适配了
【WWDC20】 Whats New in SwiftUI

13. Gauge

范围型标识组件,图中表示为PH值测试(圆圈)
【WWDC20】 Whats New in SwiftUI

14. Namespace

同一组数据集可以通过.matchGeometryEffect 修饰被划分到不同的View组件中。如图中商量两组图片,支持通过拖动实现的组转移。
【WWDC20】 Whats New in SwiftUI

15. Text

仍将是主要的文本展示组件,新版本扩展后支持直接在Text中插入Image
【WWDC20】 Whats New in SwiftUI

16. System Accent Color

应用能够默认应用系统主题色
【WWDC20】 Whats New in SwiftUI

17. Link - LPLinkView 的SwiftUI化

在原有功能的基础上新增如下功能:

  • 直接跳转至另一App
  • 以Widget的形式贴至桌面
    【WWDC20】 Whats New in SwiftUI

18. SignInWithAppleButton

新版本系统将大范围推广通过苹果账号登陆功能,在SwiftUI中甚至直接将这一行为封装为一个完整的Button
【WWDC20】 Whats New in SwiftUI
 
 

- 总结

说点废话:本次WWDC公布的对SwiftUI的内容上的更新主要能概括为一下两个方面:

  • 对功能进行补足,保证SwiftUI能够尽快在功能实现的范畴上向传统Swift看齐,摆脱臃肿的Representable接合模式,脱离原生Swift独立进行开发。
  • 另一方面,SwiftUI也紧跟Apple各个系统的脚步,完全适配了新系统Widget 等组件。

不必多言,SwiftUI未来必然是iOS开发的主流框架。不光是因为支持实时预览的preview模式将大幅改变移动应用开发中视图层和逻辑层的开发格局。更因为优雅的声明式和状态驱动型框架更加贴合Apple一直以来的理念。