用途
swiftdata-pro 用于编写和审查 SwiftData 代码,关注正确性、现代 API 使用方式以及对项目约定的遵循。它只报告真实存在的问题,不做吹毛求疵或凭空捏造问题。适用于读取、编写或审查使用 SwiftData 的项目。
主要能力
审查流程
- 使用 references/core-rules.md 检查核心 SwiftData 问题。
- 使用 references/predicates.md 检查谓词是否安全且受支持。
- 如果项目使用 CloudKit,使用 references/cloudkit.md 检查 CloudKit 特定约束。
- 如果项目面向 iOS 18+,使用 references/indexing.md 检查索引机会。
- 如果项目面向 iOS 26+,使用 references/class-inheritance.md 检查类继承模式。
- 如果只做部分工作,只加载相关的参考文件。
核心指令
- 面向 Swift 6.2 或更高版本,使用现代 Swift 并发。
- 用户强烈偏好全面使用 SwiftData。除非是 SwiftData 无法解决的功能,否则不要建议使用 Core Data 功能。
- 未经询问不要引入第三方框架。
- 使用一致的项目结构,文件夹布局由应用功能决定。
输出格式
如果用户要求审查,按文件组织发现的问题。对于每个问题:
- 说明文件和相关的行号。
- 指出被违反的规则。
- 展示简短的前后代码对比修复。
跳过没有问题的文件。最后提供按优先级排序的摘要,说明首先应做的影响最大的改动。
如果用户要求编写或改进代码,遵循上述相同规则,但直接进行修改,而不是返回一份问题报告。
输出示例
Destination.swift
第 8 行:为关系添加显式删除规则。
// 修改前 var sights: [Sight]
// 修改后 @Relationship(deleteRule: .cascade, inverse: \Sight.destination) var sights: [Sight]
第 22 行:不要在谓词中使用 isEmpty == false——它会在运行时崩溃。请改用 !。
// 修改前 #Predicate<Destination> { $0.sights.isEmpty == false }
// 修改后 #Predicate<Destination> { !$0.sights.isEmpty }
DestinationListView.swift
第 5 行:@Query 只能在 SwiftUI 视图内部使用。
// 修改前 class DestinationStore { @Query var destinations: [Destination] }
// 修改后 class DestinationStore { var modelContext: ModelContext
func fetchDestinations() throws -> [Destination] {
try modelContext.fetch(FetchDescriptor<Destination>())
}
}
摘要
数据丢失(高):Destination.swift 第 8 行缺少删除规则,意味着当某个 destination 被删除时,sights 会成为孤儿数据。
崩溃(高):第 22 行的 isEmpty == false 会在运行时崩溃——请改用 !isEmpty。
错误行为(高):DestinationListView.swift 第 5 行的 @Query 只能在 SwiftUI 视图内部工作。
示例结束。
参考文件
- references/core-rules.md - 自动保存、关系、删除规则、属性限制以及 FetchDescriptor 优化。
- references/predicates.md - 受支持的谓词操作、会在运行时崩溃的危险模式,以及不受支持的方法。
- references/cloudkit.md - CloudKit 特定约束,包括唯一性、可选性和最终一致性。
- references/indexing.md - iOS 18+ 的数据库索引,包括单一属性和复合属性索引。
- references/class-inheritance.md - iOS 26+ 的模型子类化,包括 @available 要求、schema 设置和谓词过滤。
使用方式
在读取、编写或审查使用 SwiftData 的项目时启用该技能。可根据项目情况加载对应的参考文件;若只做部分工作,只加载相关参考文件。审查结果按文件组织,编写或改进代码时直接进行修改。
适用场景
- 读取使用 SwiftData 的项目代码。
- 编写使用 SwiftData 的代码。
- 审查使用 SwiftData 的项目,检查正确性、现代 API 使用方式和项目约定。
- 针对 CloudKit、iOS 18+ 索引、iOS 26+ 类继承等特定场景进行专项检查。
限制
- 面向 Swift 6.2 或更高版本,使用现代 Swift 并发。
- 用户强烈偏好全面使用 SwiftData;除非是 SwiftData 无法解决的功能,否则不建议使用 Core Data 功能。
- 未经询问不引入第三方框架。
- 项目结构需保持一致,文件夹布局由应用功能决定。
- 关于收费、价格、平台支持范围等具体信息暂未提供。