2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论

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

【Spring Boot实战与进阶】AOP的两种动态代理,java注解的实现原理

Java 程序员 后端

【云计算】云的七大分类定义说明

行云管家

云计算 公有云 私有云 云资源

彻底说透简单工厂那些你没有关注过的细节

Tom弹架构

Java 架构 设计模式

前端Node.js面试题

CRMEB

【Spring Boot 25】JdbcTemplate配置类 ,设计模式面试题java

Java 程序员 后端

深入理解 TCP 拥塞控制

拍乐云Pano

TCP 音视频 RTC TCP通信

腾讯AI专家整理最全Python学习体系(视频+源码+案例+路线)

小Q

Python AI 面试 爬虫

【Spring 基础注解】对象创建相关注解,java开发实战经典答案百度云

Java 程序员 后端

【SpringMVC 笔记】Json 交互处理(1),面试官都被搞懵了

Java 程序员 后端

【SpringMVC笔记】Ajax 入门,linux编程基础李养群课后答案

Java 程序员 后端

【Spring Cloud 8】熔断与限流Sentinel,java现在的主流技术

Java 程序员 后端

【Spring 工厂】反转控制与依赖注入,spring集成mybatis原理面试题

Java 程序员 后端

【Quarkus 技术系列】,Java高级工程师面试答案大全

Java 程序员 后端

【Redis实战】集合类型,unixlinux编程实践教程

Java 程序员 后端

【Spring Boot 23】MyBatis事务管理,java基础知识点思维导图

Java 程序员 后端

前端组件化工程实践

循环智能

AI 组件化 智能化

Kafka 3.0 重磅发布,来看下值得关注的新功能

大数据技术指南

kafka 11月日更

【SpringMVC笔记】拦截器 ,java设计模式及实践百度云

Java 程序员 后端

以闭包方式实现一个Controller层打印日志的切面

LSJ

aop 闭包 切面

就这?彻底搞懂单例模式

蝉沐风

Java 面试 设计模式 单例模式

【MyBatis-plus】条件构造器详解,mysql索引原理及btree

Java 程序员 后端

等保测评机构每年都需要年审吗?年审时候需提供哪些资料?

行云管家

网络安全 等级保护 等保测评 等保办

【Spring Boot 6】自定义starter,花了6个月肝完阿里技术官的笔记

Java 程序员 后端

【Spring Boot实战与进阶】Controller的使用及获取请求参数的示例

Java 程序员 后端

【Spring Cloud 2】注册中心Eureka,java架构面试题spring原理

Java 程序员 后端

重磅|Apache ShardingSphere 5.0.0 即将正式发布

SphereEx

数据库 ShardingSphere Meetup Apache ShardingSphere DateBase

【SpringBoot系列】配置多环境配置文件,hadoop环境搭建教程

Java 程序员 后端

【SpringMVC 笔记】Json 交互处理,顺丰java社招面试

Java 程序员 后端

【Spring Boot 25】JdbcTemplate配置类 (1),鬼知道我经历了啥

Java 程序员 后端

【Spring 持久层】Spring 与 Mybatis 整合,spring教程极客学院

Java 程序员 后端

恒源云(GPUSHARE)_云GPU服务器如何使用Conda?

恒源云

深度学习

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