写点什么

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

评论

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

IM通讯协议专题学习(八):金蝶随手记团队的Protobuf应用实践(原理篇)

JackJiang

网络编程 即时通讯 protobuf im开发

MySQL 主从备份实践

lambochen

在可观测性的启蒙与初试探--快速实现根因分析/业务大盘

Yestodorrow

架构 监控 可观测性

Redis缓存的主要异常及解决方案

京东科技开发者

数据库 缓存 缓存击穿 Redis 数据结构 企业号 1 月 PK 榜

小令动态丨令牌云获中国金融科技·最佳新锐企业奖

令牌云数字身份

创新大赛 金融科技创新

web前端培训课程怎么选择

小谷哥

智能合约DAPP项目系统开发技术逻辑(dEOM)

I8O28578624

什么是NFT链游项目游戏系统开发技术(Demo)采用Solidity 智能合约系统开发方案

I8O28578624

大公司为什么禁止SpringBoot项目使用Tomcat?

程序员大彬

Java springboot

基于 std::variant 的运行时多态

SkyFire

c++ 多态

C++命名空间:别再因为命名冲突而烦恼了。

子夜的星

c++ 命名空间 C++基础

Java踩坑之三目运算符类型转换

lambochen

浅谈区块链项目开发技术(Solidity成熟语言)

I8O28578624

NFT元宇宙链游游戏项目系统开发技术解析(Demo)

I8O28578624

小令动态丨令牌云2022年度盘点

令牌云数字身份

盘点2022

100万条数据解读2023银行APP用户体验升级方向

易观分析

金融 手机银行

一个小故事带你了解 Spring IoC

lambochen

C++缺省参数:学习成为一名优秀的舔狗

子夜的星

c++ 缺省参数 编程语言、 基础语法

高效学 C++|继承与组合

TiAmo

c++ 编程语言 继承

Pipy 0.90.0 发布

Flomesh

多线程并发 Pipy 流量管理

Mockito 助你实现真正的单元测试

lambochen

【译】5 Different Ways to Create Objects in Java

lambochen

复习前端:JavaScript 字符串操作方法

devpoint

JavaScript 前端开发 字符串处理

浅谈 Java 多版本发布

lambochen

编译期多态

SkyFire

c++ 多态

佛萨奇2.0系统开发解析逻辑教程方案(成熟技术)

I8O28578624

如何打造一支有战斗力的团队?

石云升

极客时间 1月月更 技术领导力实战笔记

不过是享受了互联网的十年红利期而已。

why技术

Java 程序员 大学生

流程的作用是服务于业务,所有不能被用来帮业务部门好好打粮食的流程,都不是好流程!

CTO技术共享

参加前端培训班哪个好

小谷哥

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