写点什么

SwiftUI 新增了文档协议,提升了性能,并进行了其他改进

作者:Sergio De Simone
  • 2026-07-08
    北京
  • 本文字数:1057 字

    阅读完需:约 3 分钟

WWDC 2026 大会上, SwiftUI 的最新版本引入了新的 Document 协议,用于实现高效的磁盘访问和基于快照的更新,同时改进了用于在列表、网格和分区中对内容进行重新排序的 API。此外,为了提升性能,该版本还扩展了展示功能(例如在任意视图上支持滑动操作),改进了 AsyncImage 缓存,并针对 Observable 类型提供了状态初始化延迟。

经过升级的 SwiftUI 工具栏 API 有助于在应用规模扩大时管理有限的空间。系统会自动隐藏无法显示的内容项,但开发者可以通过以下方式控制该行为:使用 visibilityPriority 为 Undo/Redo 等重要的按钮设置优先级,将使用频率比较低的操作移至溢出菜单,并固定 Share 等关键操作使其始终可见。此外,工具栏还可以在滚动时自动最小化,从而最大化屏幕空间,提升不同设备尺寸下的易用性。

SwiftUI 还引入了一种新的文档架构,使基于文档的应用程序能够更高效地处理大量的数据和频繁的 UI 更新。开发者可以定义一种负责读写操作的文档类型,并将其与 Observation 框架集成,从而确保视图仅在必要时更新。

在写入操作中,应用程序会创建文档状态的快照,并使用异步的 DocumentWriter 来保存发生变化的部分。这不仅提升了性能,保持了 UI 的响应性,同时还支持进度报告。

在读取方面,配套的 ReadableDocument 和 DocumentReader 类负责从磁盘加载数据。总体而言,该系统采用基于快照的差异比较和异步操作,优化了复杂文档工作流的性能。

SwiftUI 还引入了可重新排序的容器 API,用户可以使用相同的代码在列表、网格或其他布局中轻松拖动和重新排列内容项,并支持内置动画和跨平台,包括 watchOS。

它还增强了交互和展示功能,不仅支持列表视图,还在所有视图中支持滑动操作;允许开发者在保持滑动行为的同时使用 LazyVStack 等灵活的布局方式;使上下文菜单和确认对话框支持基于内容项的操作绑定,例如删除内容项等操作。

最后需要说明的是,最新版本的 SwiftUI 还在数据流和性能方面做了显著的改进。现在,AsyncImage 已经支持自动 HTTP 缓存,可以避免在滚动时发生不必要的重新加载,同时仍然允许自定义请求和会话配置。@State 属性也通过懒加载进行了优化,可以确保对象仅创建一次,而不是在每次重新初始化视图时都创建。此外,通过引入 ContentBuilder,编译器性能也得到了提升,这简化了视图的构建过程,有助于消除那个臭名昭著的错误(“编译器无法在合理时间内对该表达式进行类型检查”)。

SwiftUI 更新的内容远不止本文所涵盖的这些。如果想要了解所有细节,请务必观看官方演示

原文链接:https://www.infoq.com/news/2026/07/swiftui-wwdc26/