写点什么

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

评论

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

安全相关总结

纯纯

程序的机器级表示-异构的数据结构

引花眠

计算机基础

ASP.NET Core 性能优化最佳实践

newbe36524

微服务 性能优化 .net core ASP.NET Core

第五周作业

Vincent

极客时间 极客大学

ARTS Week16

时之虫

ARTS 打卡计划

数据结构与算法系列之数组

书旅

数据结构 算法 数组 数据结构与算法

03 Spring Security 入门实例

哈库拉玛塔塔

Spring Boot kotlin spring security

ARTS打卡Week 12

teoking

哦!这该死的 C 语言

苹果看辽宁体育

c 后端

CountDownLatch 瞬间炸裂!同基于 AQS,凭什么 CyclicBarrier 可以这么秀?

程序员小航

Java 源码 AQS 源码阅读 CyclicBarrier

图计算黑科技:打开中文词嵌入训练实践新模式

腾讯云大数据

大数据

链表中移除重复节点,保罗·格雷厄姆的传奇博客,Mac三指拖动操作,大数据平台 John 易筋 ARTS 打卡 Week 17

John(易筋)

大数据 ARTS 打卡计划 链表移除相同节点 保罗格雷厄姆 mac三指操作设置

鹰眼 | 分布式日志系统上云的架构和实践

腾讯云大数据

大数据

洗牌算法

C语言与CPP编程

c c++ 算法 编程语言

为什么互联网巨头们纷纷使用Git而放弃SVN?(内含Git核心命令与原理总结)

冰河

git 冰河 代码管理 代码仓库 分支合并

前端 10 问之 Docker (第一篇)

局外人

Docker

ARTS 打卡 (20.09.07-20.09.13)

小王同学

ARTS打卡 第16周

引花眠

微服务 ARTS 打卡计划

Mysql学习笔记:InnoDB事务和ACID模型

马迪奥

MySQL innodb

智能商业时代的思考(二)网络协同抓住用户

刘旭东

微信 商业价值 数据智能 网络协同 商业智能

Spring 5 中文解析测试篇-Spring MVC测试框架

青年IT男

单元测试 Spring5

oeasy教您玩转 linux 010213 中文 fcitx

o

PB级大规模Elasticsearch集群运维与调优实践

腾讯云大数据

大数据

Elasticsearch索引容量管理实践

腾讯云大数据

大数据

第五周总结

Vincent

极客时间 极客大学

C语言指针详解

C语言与CPP编程

c c++ 编程语言 指针

导致系统不可用原因及密码验证

纯纯

简述C语言宏定义的使用

C语言与CPP编程

c c++ 编程语言

极客大学-架构师训练营

9527

架构师训练营第十四周总结

张明森

你必须要了解的「架构」小历史

小齐本齐

spring Spring Cloud Spring Boot

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