肘子的 Swift 周报 #002

肘子的话

欢迎访问 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 中的并发编程

fatbobman (东坡肘子)

在 Core Data 中进行并发编程可能并不困难,但是充满了陷阱。即使对 Core Data 有充分的经验,稍有疏忽也可能在代码中埋下隐患,从而使应用程序变得不安全。SwiftData 作为 Core Data 的继任者,提供了一种更加优雅、更加安全的并发编程机制。本文将介绍 SwiftData 是如何解决这些问题的,并为开发者提供更好的并发编程体验。

在写作过程中,发现要阐述的内容比较多,最终分成了三篇。前两篇分别为 CoreData 探秘 - 从数据模型构建到托管对象实例揭秘 SwiftData 的数据建模原理

近期推荐

深入理解 Observation - 原理,back porting 和性能

onevact

在 WWDC 23 中,Apple 推出了全新的 Observation 框架,旨在解决 SwiftUI 上的状态管理混乱和性能问题。这个框架的工作方式看似非常神奇,甚至无需特别声明,就能在 View 中实现属性粒度的订阅,从而避免不必要的刷新。本篇文章将深入探讨背后的原理,帮助您:

  • 理解 Observation 框架的实质和实现机制
  • 比较其与之前解决方案的优势所在
  • 介绍一种把 Observation 前向兼容到 iOS 14 的方式
  • 探讨在处理 SwiftUI 状态管理时的一些权衡与考虑

本文除了讲解 Observation 的实现原理外,更重要的是,作者实现了一个第三方库 ObservationBP ,通过对 Observation 源代码的包装,让开发者可以在更低的系统版本中使用到 Observation 的功能。

Great SwiftUI

Aviel Gross

这是 SwiftUI.wtf 上的一篇文章,作者在不久对其进行了更新。Aviel Gross 对这篇文章的描述是:这是一份关于 SwiftUI 代码库的最佳实践、技巧和窍门的集合,以充分发挥其优势。文章分为三个部分:

  • 行为:使你的代码实现你想要的功能,或者你认为应该实现的功能
  • 结构:如何布局你的代码(放置逻辑的位置,如何构建主体等)
  • 性能:使你的应用程序运行快速,并增加其稳定性

文章中列出的经验、技巧具备相当的普适性,但并非铁律。在个别场景或需求中,要根据实际情况做出调整。因此掌握其中的原理比熟记技巧更加重要。

「破解」visionOS Beta 1.4 中的彩蛋

V2XR

在这篇文章中,作者介绍了他从 visionOS Beta 1.4 版本的模拟器文件中挖掘出的一些关于 VisionOS 系统的「彩蛋」。包括系统应用、相册中的空间照片&全景照片、从 Optic ID 到 EyeSight 到数字人、佩戴提示(RealityCoverSheet)、配镜处方(CorePrescription)等内容。通过对其中信息的分析,可以一窥 visionOS 的一些设计细节和进展。

Designing for spatial computing: from iOS and iPadOS to visionOS

Emanuele Agosta

Apple Vision Pro 标志着空间计算领域的重大变革,其为用户提供了前所未有的互动性和沉浸感。在本文中,Emanuele Agosta 将探讨空间计算的设计原则以及实现 iOS/iPadOS 应用程序无缝过渡到 visionOS 应用程序的关键考虑因素并提供基础指导。

Working With XcodeKit <> SwiftLeeds

Aryaman Sharda

作为 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

在这篇文章中,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 订阅本周报的中英文电子邮件版本。

相关推荐
软件聚导航1 天前
uniapp 安卓和ios震动方法,支持息屏和后台震动,ios和安卓均通过测试
android·ios·uni-app
键盘敲没电2 天前
【iOS】知乎日报总结
学习·ios·objective-c·xcode
安和昂2 天前
【iOS】UICollectionView的学习
学习·ios·cocoa
二流小码农2 天前
鸿蒙开发:自定义一个任意位置弹出的Dialog
android·ios·harmonyos
小江村儿的文杰3 天前
UE4 iOS Package的过程与XCode工程中没有游戏Content的原因
macos·ios·ue4·xcode
__WanG3 天前
Flutter将应用打包发布到App Store
前端·flutter·ios
安和昂3 天前
【iOS】bug调试技巧
ios·bug·cocoa
emperinter3 天前
WordCloudStudio Now Supports AliPay for Subscriptions !
人工智能·macos·ios·信息可视化·中文分词
AirDroid_cn3 天前
iPhone或iPad接收的文件怎么找?怎样删除?
ios·iphone·ipad·文件传输
Swift社区3 天前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift