肘子的话
从在 WWDC 2023 上推出第一个测试版开始,一转眼,SwiftData 诞生已经四个月了。最近的一个多月,我花了相当大的精力对其进行了研究和学习,并写了几篇关于它的文章。
SwiftData 在相当程度上解决了 Core Data 中几个主要被诟病的问题。主要体现在以下几个方面:纯代码建模、属性类型的多样性(自动映射符合 RawRepresentable 和 Encodable 的类型)、更安全优雅的并发编程体验、类型安全的谓词以及与 SwiftUI 更好的配合等。其中,数据模型的创建逻辑和新的并发编程方式给我留下了深刻的印象。
遗憾的是,理想很丰满,现实很骨感。就在我满怀热情地想要用 SwiftData 构建全新的应用程序时,有限的谓词表述能力却成为了阻碍。新的谓词 API 无法完美地与合成类型配合(导致属性的新类型优势大打折扣),在对象关系的表述方面也存在不足。而且,谓词属于 Foundation 框架,也增加了两个开发团队之间的协调难度。
除了谓词外,较差的稳定性、有限的 API 、为数不少的 Bug 都是不得不面对的问题。
作为未来苹果生态系统中最重要的持久化框架,SwiftData 的设计非常精巧,但实现却很仓促。这无疑让人感到遗憾。
我会暂缓启动开发使用 SwiftData 的 iOS 17+ 应用,观察谓词和稳定性能否在接下来的升级中得到改善。不过通过对 SwiftData 实现的研究,我对如何以现代的方式使用 Core Data,以及如何创建适合迁移到 SwiftData 的 Core Data 应用有了更深入的了解,也算收获颇丰。
之后我还会分享几篇与 SwiftData 有关的内容,期待 SwiftData 的完整体能够尽早的到来!
原创
SwiftData 中的并发编程
在 Core Data 中进行并发编程可能并不困难,但是充满了陷阱。即使对 Core Data 有充分的经验,稍有疏忽也可能在代码中埋下隐患,从而使应用程序变得不安全。SwiftData 作为 Core Data 的继任者,提供了一种更加优雅、更加安全的并发编程机制。本文将介绍 SwiftData 是如何解决这些问题的,并为开发者提供更好的并发编程体验。
在写作过程中,发现要阐述的内容比较多,最终分成了三篇。前两篇分别为 CoreData 探秘 - 从数据模型构建到托管对象实例 和 揭秘 SwiftData 的数据建模原理 。
近期推荐
深入理解 Observation - 原理,back porting 和性能
在 WWDC 23 中,Apple 推出了全新的 Observation 框架,旨在解决 SwiftUI 上的状态管理混乱和性能问题。这个框架的工作方式看似非常神奇,甚至无需特别声明,就能在 View 中实现属性粒度的订阅,从而避免不必要的刷新。本篇文章将深入探讨背后的原理,帮助您:
- 理解 Observation 框架的实质和实现机制
- 比较其与之前解决方案的优势所在
- 介绍一种把 Observation 前向兼容到 iOS 14 的方式
- 探讨在处理 SwiftUI 状态管理时的一些权衡与考虑
本文除了讲解 Observation 的实现原理外,更重要的是,作者实现了一个第三方库 ObservationBP ,通过对 Observation 源代码的包装,让开发者可以在更低的系统版本中使用到 Observation 的功能。
Great SwiftUI
这是 SwiftUI.wtf 上的一篇文章,作者在不久对其进行了更新。Aviel Gross 对这篇文章的描述是:这是一份关于 SwiftUI 代码库的最佳实践、技巧和窍门的集合,以充分发挥其优势。文章分为三个部分:
- 行为:使你的代码实现你想要的功能,或者你认为应该实现的功能
- 结构:如何布局你的代码(放置逻辑的位置,如何构建主体等)
- 性能:使你的应用程序运行快速,并增加其稳定性
文章中列出的经验、技巧具备相当的普适性,但并非铁律。在个别场景或需求中,要根据实际情况做出调整。因此掌握其中的原理比熟记技巧更加重要。
「破解」visionOS Beta 1.4 中的彩蛋
在这篇文章中,作者介绍了他从 visionOS Beta 1.4 版本的模拟器文件中挖掘出的一些关于 VisionOS 系统的「彩蛋」。包括系统应用、相册中的空间照片&全景照片、从 Optic ID 到 EyeSight 到数字人、佩戴提示(RealityCoverSheet)、配镜处方(CorePrescription)等内容。通过对其中信息的分析,可以一窥 visionOS 的一些设计细节和进展。
Designing for spatial computing: from iOS and iPadOS to visionOS
Apple Vision Pro 标志着空间计算领域的重大变革,其为用户提供了前所未有的互动性和沉浸感。在本文中,Emanuele Agosta 将探讨空间计算的设计原则以及实现 iOS/iPadOS 应用程序无缝过渡到 visionOS 应用程序的关键考虑因素并提供基础指导。
Working With XcodeKit for SwiftLeeds
作为 EditKit Pro 的作者,Aryaman Sharda 受邀在本次 SwiftLeeds 上以 Working with XcodeKit 为主题进行了演讲。在演讲中他分享了开发 Xcode Source Editor Extensions 的一些经验和技巧,并在本文中提供了此次演讲使用的演示文稿。
EditKit Pro 是一个 Xcode Source Editor Extension,它提供了一组工具,可以帮助开发者编写更好、更干净、更高效的代码。集成了诸如快速格式化代码、创建 Codable 模型、生成模拟数据、按长度对行排序、整理 SwiftUI 视图等众多功能。可以在此处获取 EditKit Pro 的源代码,或直接通过 App Store下载安装。
Interoperability: Swift’s Super Power
在这篇文章中,Saleem Abdulrasool 分享了他们使用 Swift 开发 Windows 应用的经验,通过介绍如何通过 Swift 语言内置的互操作性功能来访问 Windows API 和 COM 接口,展示了 Swift 作为一门跨平台语言的潜力。
Swift 5.9 引入了 Swift 与 C++ 的双向互操作性支持。通过生成 C++ 头文件,Swift API 可以以近似的 C++ 接口的形式暴露给 C++ 使用,极大简化了在现有 C++ 代码中引入 Swift 的过程。该特性默认开启,无需额外修改代码。新功能让 Swift 在保持自身特色的同时,快速融入现有的 C++ 生态。