SuperAPI AI 工具集

swiftdata

数据与分析

查看项目

更新于 10-15 21:12

技能介绍

用途:在 iOS 26+ 应用中用 SwiftData 持久化、查询和管理结构化数据,也可用于评审或改进现有 SwiftData 数据层。

主要能力: 模型定义:对 class(非 struct)使用 @Model;@Attribute 支持 .externalStorage、.unique、.spotlight、.allowsCloudEncryption、.preserveValueOnDeletion、.ephemeral、.transformable、originalName 重命名;@Relationship 可配 deleteRule(.cascade/.nullify/.deny/.noAction)与 inverse;#Unique 定义复合唯一约束;iOS 26+ 支持模型继承。@Transient 属性必须给默认值。 容器与同步:用 ModelContainer(for:) 或 ModelConfiguration 配置存储、group container 与 cloudKitDatabase;CloudKit 同步还需 iCloud/CloudKit entitlement 与 Remote notifications,模型需避免唯一约束、关系可选并显式指定 inverse、大 Data 用 .externalStorage。 查询:@Query 用于 SwiftUI 响应式展示,支持动态 query 与 FetchDescriptor;FetchDescriptor 可设 fetchLimit、fetchOffset、propertiesToFetch、relationshipKeyPathsForPrefetching,并提供 fetchCount、fetchIdentifiers、enumerate。 迁移:用 VersionedSchema 与 SchemaMigrationPlan 管理版本,支持 lightweight 与 custom 迁移阶段。 并发:用 @ModelActor 在后台执行,ModelContainer 是 Sendable,ModelContext 不是;跨 actor 传 PersistentIdentifier 而非模型实例,@ModelActor 内需显式 save()。

使用方式:在 App 场景或根视图挂 .modelContainer;视图中通过 @Environment(.modelContext) 与 @Query 读写;预览与测试用 ModelConfiguration(isStoredInMemoryOnly: true)。

限制:@Model 只能用于 class;@Predicate 不支持循环、嵌套声明、变更操作与任意方法调用(如 uppercased()),应使用 localizedStandardContains 等受支持表达式;不要将 @Model 对象跨 actor 传递;不要用 ObservableObject/@Published;非可选关系无默认值会在重建时崩溃;CloudKit 下不要把所有标量都设为可选。

与其他技能边界:纯 Core Data 栈配置、NSManagedObjectContext、NSFetchRequest 及批量操作属于 core-data 技能;本技能仅在 SwiftData 与 Core Data 共存或迁移时提供边界指导,共存时指向同一 SQLite 存储、对齐命名与关系形状、同一实体同一时间只由一个栈写入。