肘子的话
欢迎访问 fatbobman.substack.com 订阅本周报的中英文电子邮件版本。
从在 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 <> 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++ 生态。
THANK YOU
如果你觉得这份周报或者我的文章对你有所帮助,欢迎点赞 、赞赏 ,并将其转发给更多的朋友。
欢迎访问 fatbobman.substack.com 订阅本周报的中英文电子邮件版本。