写点什么

苹果推出 SwiftData,持久化框架的技术革新

  • 2023-06-19
    北京
  • 本文字数:1115 字

    阅读完需:约 4 分钟

苹果推出 SwiftData,持久化框架的技术革新

苹果于 WWDC 2023 上推出新框架 SwiftData,提供声明性的、以 Swift 为先的 API,可在 iOS 应用中进行数据持久化工作。SwiftData 可轻松将一个 Swift 类转换为一个持久化模型,非常适合同 SwiftUI 一并使用。


在几年前通过 SwiftUI 改变了 UI 在其平台上的定义方式后,苹果正在迈出超越 Core Data 的第一步,即一个基于 ORM、严格绑定于 Objective-C 动态能力的持久化框架。


虽然 SwiftUI 所提供的 API 让持久化模型的定义成为可能,但这种方式却颇为繁琐。Core Data 通常是在 Xcode 内集成的 Schema Model 编辑器上使用,由此生成的 .xcdatamodeld 是真实之源,可被用于自动生成存根(stub)。存根所提供的基类则被用作实际模型的基类。


SwiftData 的方式则完全相反,它是将代码看作是真实之源,并以此定义一个简单的模型:


@Modelclass Recipe {    @Attribute(.unique) var name: String    var summary: String?    var ingredients: [Ingredient]}
复制代码


仔细看能发现 SwiftData 是如何依赖 Swift 5.9 中新引入的宏功能。简而言之,@Model 宏会将 @PersistedProperty 应用于 Recipe 类的所有属性,并在类的实现中添加初始化代码和其他的必要属性。


由于这层额外的逻辑对开发者而言完全透明,SwiftData 得以将所有属性映射至其底层存储。据苹果公司称,持久性对象会在需要时从持久化存储中获取并更新。


BoolIntString 等简单类型支持开箱可用,但更为复杂的类型则必须要符合 Codable 协议,才能于持久化类中使用。


如上文所述,SwiftData 与 SwiftUI 的相性很好。而事实上,@Model 宏也会让类在符合 ObservableObject 协议的同时,让所有持久化的属性表现为 @Published 属性的形式。此外,将 SwiftUI 视图接入持久化模型只需使用一个新的 @Query 属性。与 @State 和 @Binding 的使用方式相类似,每次底层数据发生变化时,@Query 可确保视图的自动重新渲染。


SwiftData 中还提供对谓词(Predicate)定义的支持,可用于过滤数据。编译时对谓词进行检查,并对类型不匹配的问题报编译错误。此外,SwiftData 模型也可通过 CloudKit 或以 iCloud 云盘中存储的文件形式进行跨设备同步。


为让开发者能更为轻松地迁移至 SwiftData,该框架支持在现有 Core Data 应用中的逐步采用,在苹果提供的演示项目中展示了如何在一个 Core Data 应用中仅部分使用 SwiftData。


最后值得留意的是,SwiftData 并不是换了皮的 Core Data。正如苹果于 WWDC 中所演示的,SwiftData 是借助了同 Core Data 一样的持久化引擎,但却是一个完全独立的堆栈。


原文链接

Apple Introduces SwiftData, a SwiftUI-Ready Core Data Replacement


相关阅读:

Swift 5.8新特性预览:支持函数向后部署

苹果现已支持 Swift 包索引

2023-06-19 08:009644

评论

发布
暂无评论
发现更多内容

欢迎客户支持自动化领域的新兴领导者 Percept.AI 加入 Atlassian 大家庭!

Atlassian

敏捷 Atlassian Jira JiraServiceManagement 客户服务

《人月神话》第十六章阅读笔记:没有银弹

panda

人月神话 阅读笔记 没有银弹

《人月神话》第十七章阅读笔记:再论“没有银弹”

panda

人月神话 阅读笔记 没有银弹

作业七-王者荣耀商城异地多活架构设计

曾竞超

架构实战营 「架构实战营」

跨平台移动APP开发进阶(三):hbuilder+mui mobile app 开发心酸路

No Silver Bullet

跨平台 2月月更 mui

架构实战营:模块二作业

刘璐

从冬奥看中国科技(二):造雪突围进行时

脑极体

开杠面试官-微信朋友圈高性能架构

晨亮

「架构实战营」

微信朋友圈高性能架构分析

IT屠狗辈

架构 高性能 微信朋友圈 架构实战营

微信朋友圈的高性能复杂度分析

tom

模块二作业

Mr小公熊

【第 24 期】前端食堂技术周刊

童欧巴

前端 前端开发 行业资讯 周刊 资讯

架构学习【02】——朋友圈高性能复杂度分析

tiger

架构实战营

每天都扫的二维码,你知道它的技术原理吗?

慕枫技术笔记

后端 2月月更

微信朋友圈高性能复杂度分析

孙强

#架构实战营

Netflix是如何做决策的? | 7. 学习的文化

俞凡

数据分析 netflix 大厂实践 2月月更

在线YAML转CSV工具

入门小站

工具

微信朋友圈架构设计

随欣所遇

#架构训练营 架构训练营5期

[JAVA冷知识]JAVA居然可以多继承吗?让我们用内部类去实现吧!

山河已无恙

Java 2月月更

微信朋友圈的高性能复杂度

smile

架构实战营

朋友圈高性能复杂度分析

风中奇缘

架构实战营 「架构实战营」

微信朋友圈高性能复杂度分析

Geek_f3e842

架构实战营

学生管理系统详细架构设计

刘洋

架构实战营 「架构实战营」

微信朋友圈的高性能复杂度分析

张逃逃

真正的Kafka多线程消费

dinstone

kafka 多线程 并发消费

重学架构之微信朋友圈高性能架构分析

陈华英

架构训练营 架构实战营

聊聊领导力与带团队的那些事

大卡尔

团队管理 领导力 质量保障 2月月更

模块二作业

Geek_ec866b

架构实战营

Linux之iostat命令

入门小站

微信朋友圈高性能复杂度方案设计

Fingal

架构实战营

剑指Offer——你真的看懂无领导小组面试了吗?

No Silver Bullet

面试 offer 2月月更 无领导面试

苹果推出 SwiftData,持久化框架的技术革新_移动_Sergio De Simone_InfoQ精选文章