未来已来|人工智能与数据库融合发展分论坛议程初探 了解详情
写点什么

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

评论

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

【HZERO微服务平台4】源码分析之admin服务刷新路由、权限、swagger的过程

qiaoxingxing

签约计划第二季

XML数字签名原理篇

RingCentral铃盛

区块链产业规模约达50亿元,已成为数字经济发展重要引擎

CECBC

英特尔技术发力:着眼10倍封装密度提升,30%~50%晶体管密度提升,布局非硅基半导体

科技新消息

【HZERO微服务平台3】源码分析之oauth服务token生成、校验、获取信息、传递

qiaoxingxing

签约计划第二季

跨平台多主机键鼠共享

Arch

恒源云(GPUSHARE)_CV领域之几何变化

恒源云

深度学习 CV

火遍全网的「蚂蚁呀嘿」教程开源了!

百度开发者中心

开源

【HZERO微服务平台2】源码分析之网关

qiaoxingxing

签约计划第二季

全新“支付方式”来了,数字货币六大行公开支持,安全且转账免费

CECBC

降低成本对技术组织意味着什么?

田晓亮

云计算 serverles

CSS之选择器(五)

Augus

CSS 12月日更

如何优雅地在Vue页面中引入img图片

CRMEB

实体链接在小布助手和OGraph的实践应用

安第斯智能云

人工智能 深度学习 算法 nlp 知识图谱

OAuth2.0面面观

RingCentral铃盛

XML数字签名实践篇

RingCentral铃盛

【HZERO微服务平台5】JHipster接入HZERO

qiaoxingxing

签约计划第二季

首个国产元宇宙“希壤”来临,百度成了先锋!

CECBC

如何在建木CI中使用Vault管理密钥

Jianmu

DevOps CI/CD 开源软件

百度开源一款基于 Git 的多仓库管理工具:MGit

百度开发者中心

git 开源

【HZERO微服务平台1】开源免费的企业级PaaS平台

qiaoxingxing

签约计划第二季

ZooKeeper 分布式锁 Curator 源码 05:分布式读写锁和联锁

程序员小航

Java 分布式锁 curator

3天后,浪潮云有大动作!

浪潮云

Go语言学习查缺补漏ing Day8

恒生LIGHT云社区

golang 编程语言 Go 语言

简单3步,OpenHarmony上跑起ArkUI分布式小游戏

HarmonyOS开发者

OpenHarmony

java实现数据导出

卢卡多多

28天写作 数据导出 12月日更

Hoo虎符研究院 | 区块链简报 20211213期

区块链前沿News

区块链 Hoo 虎符交易所

AOP在JavaScript和TypeScript中的应用

RingCentral铃盛

值得收藏!2021百度开源技术干货大汇总

百度开发者中心

开源 2021 内容合集 技术专题合集 百度开源

深入研究【HZERO微服务平台】开源免费的企业级PaaS平台

qiaoxingxing

内容合集 签约计划第二季

如何高效完成HarmonyOS分布式应用测试?|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS ArKUI 3.0

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