10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

苹果推出 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:009785

评论

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

JS 防抖与节流

旗袍码农

半导体芯片小白基础知识(1) (28天写作 Day22/28)

mtfelix

芯片 半导体 集成电路 28天写作

GTX1060安装TF2-GPU

IT蜗壳-Tango

七日更

Cisco路由器调试命令大全,看完就全部学会!

开发质量提升系列:系统建起来就能解决项目的困难?

罗小龙

最佳实践 方法论 28天写作

h-index

lidaobing

28天写作 h-index

Git操作文档

Paul

28天瞎写的第二百三十二天:转角遇到蚵仔煎

树上

28天写作

回到过去就能无憾了吗?「幻想短篇 22/28」

道伟

28天写作

提词器来了 | 视频号28天(23)

赵新龙

28天写作

Soul 源码阅读 06|Nacos 同步数据分析

哼干嘛

交易系统架构演进之路:服务治理

比伯

Java 编程 程序员 架构 技术宅

Spark底层原理详细解析(深度好文,建议收藏)

五分钟学大数据

大数据 spark

CSS(八)——CSS盒模型

程序员的时光

程序员 大前端 七日更 28天写作

管理笔记[1]:成为管理者的开端“以人文本“

L3C老司机

创业失败启示录|神奇的茶学

阿萌

28天写作 创业失败启示录 青城

线程有哪些状态,彼此之间如何切换

武哥聊编程

Java 多线程 28天写作

webpack | plugin机制详解

梁龙先森

大前端 webpack 28天写作

《程序员修炼之道》- 务实的方法(4)

石云升

程序员 28天写作

字节跳动:“挖”出来的技术战斗力

李忠良

28天写作

机器学习·笔记之:Gradient Descent

Nydia

驶向数字智能的瀚海,“懂行人”助力石油人乘风破浪

脑极体

程序员面试时一定要注意这五个陷阱!你记住了吗?

Java架构师迁哥

在世界球场一球成名:HMS 生态为游戏开发者送出的助攻

脑极体

老同学遭遇电信诈骗纪实

石君

28天写作 电信诈骗

资本市场两极分化将是新常态

JiangX

28天写作

姐夫深夜不睡觉就在看spring+mybatis这两份源码资料,吸引力就这么强大吗?

荒芜

Java spring 源码 mybatis spring Boot Starter

就这?Object类一点不难理解

后台技术汇

28天写作

使用nodejs构建Docker image最佳实践

程序那些事

Docker nodejs 程序那些事 docker image nodejs和docker

架构师训练营第 2 期 第 6 周 作业一:CAP原理.md

老腊肉

架构师训练营第2期

MapReduce练习案例4 -求共同好友

小马哥

大数据 hadoop mapreduce 七日更

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