写点什么

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

评论

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

jackson学习之一:基本信息

程序员欣宸

4月月更

天翼云云主机快照、云硬盘备份、云主机备份之间的区别

天翼云开发者社区

云主机 云备份

如何利用MHA+ProxySQL实现读写分离和负载均衡

华为云开发者联盟

MySQL 读写分离 高可用架构 ProxySQL MHA

到底为什么你我都要了解社会工程学

图灵教育

黑客 社会工程 社会科学

天翼云CDN最佳实践

天翼云开发者社区

CDN

如何有效的对云专线进行测速

天翼云开发者社区

网络

自助洗车机厂家如何选?要注意什么

共享电单车厂家

自助洗车机多少钱 自助洗车加盟 自助洗车机厂家

小区自助洗车机赚钱吗?想投几台

共享电单车厂家

自助洗车加盟 投资自助洗车机 自助洗车投资费用 自助洗车是否赚钱

龙蜥社区第七次运营委员会会议顺利召开

OpenAnolis小助手

开源社区 龙蜥社区 理事单位 运营委员会

实例带你掌握如何分解条件表达式

华为云开发者联盟

代码 函数 条件表达式 条件分支 条件逻辑

netty系列之:netty中的核心编码器base64

程序那些事

Java Netty 程序那些事 4月月更

产品宣传手册是如何制作的?

小炮

产品宣传册

自助洗车机设备一台多少钱划算

共享电单车厂家

自助洗车机多少钱 自助洗车机设备价格

Google如何申请客户端ID并调试代码?

CRMEB

大巧不工,袋鼠云正式开源大数据任务调度平台——Taier(太阿)!

袋鼠云数栈

数据库 开源

Go 1.18 新特性:多模块工作区模式

华为云开发者联盟

Go 指令 go 1.18 多模块工作区 工作区

巧用天翼云盘备份云主机数据

天翼云开发者社区

云主机 云存储

Masa Blazor in Blazor Day

MASA技术团队

C# .net 微软

「技术人生」专栏作者来直播间啦!欢迎来提问

阿里巴巴中间件

阿里云 云原生 中间件 技术人生 一号位

解析天翼云IPsec VPN和SSL VPN的区别

天翼云开发者社区

vpn

10元自助洗车机器多少钱一台?

共享电单车厂家

自助洗车机价格 10元自助洗车机器 自助洗车机器多少钱

投资自助洗车机要多少钱?看情况

共享电单车厂家

自助洗车加盟 投资自助洗车机 自助洗车机要多少钱

智能运维时代,如何做好日志全生命周期管理

云智慧AIOps社区

日志 智能运维 日志管理

招商银行 KubeVela 离线部署实践

阿里巴巴中间件

阿里云 最佳实践 云原生 中间件 KubeVela

【等保】等级保护定级对象只定信息系统吗?还是说定单位?

行云管家

网络安全 等保 等级保护 等保2.0

WebApi性能优化

神农写代码

聚焦丨看泛建材巨头如何实现数字化改造,推动企业业务增长

数商云

产业互联网 数字化转型 企业数字化

DapuStor大普微电子加入PolarDB开源数据库社区

阿里云数据库开源

数据库 阿里云 开源数据库 polarDB

安全网关是啥什么东西?有什么优势?与堡垒机的区别是什么?

行云管家

网络安全 堡垒机 运维审计 安全网关 堡垒机防火墙

RocketMQ-Streams架构设计浅析

阿里巴巴中间件

阿里云 RocketMQ 云原生 中间件

企业如何突破数据治理临界点,四大数据要素深度剖析

袋鼠云数栈

大数据 数据中台

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