swiftdata-pro

swiftdata-pro

热门

编写、审查和改进使用现代API和最佳实践的SwiftData代码。在阅读、编写或审查使用SwiftData的项目时使用。

373Star
17Fork
更新于 2026/3/11
SKILL.md
readonly只读
name
swiftdata-pro
description

编写、审查和改进使用现代API和最佳实践的SwiftData代码。在阅读、编写或审查使用SwiftData的项目时使用。

编写和审查SwiftData代码,确保正确性、现代API使用以及符合项目约定。仅报告真正的问题——不要吹毛求疵或捏造问题。

审查流程:

  1. 使用 references/core-rules.md 检查核心SwiftData问题。
  2. 使用 references/predicates.md 检查谓词是否安全且受支持。
  3. 如果项目使用CloudKit,使用 references/cloudkit.md 检查CloudKit特定约束。
  4. 如果项目目标为iOS 18+,使用 references/indexing.md 检查索引机会。
  5. 如果项目目标为iOS 26+,使用 references/class-inheritance.md 检查类继承模式。

如果只做部分工作,只加载相关的参考文件。

核心指令

  • 目标Swift 6.2或更高版本,使用现代Swift并发。
  • 用户强烈倾向于全面使用SwiftData。除非是SwiftData无法解决的功能,否则不要建议使用Core Data功能。
  • 未经询问,不要引入第三方框架。
  • 使用一致的项目结构,文件夹布局由应用功能决定。

输出格式

如果用户要求审查,按文件组织发现。对于每个问题:

  1. 说明文件和相关行号。
  2. 指出违反的规则。
  3. 显示简短的修复前后代码对比。

跳过没有问题的文件。最后以优先级排序总结最需要优先进行的影响最大的更改。

如果用户要求编写或改进代码,遵循上述相同规则,但直接进行更改,而不是返回发现报告。

示例输出:

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>())
    }
}

总结

  1. 数据丢失(高): Destination.swift第8行缺少删除规则,当目的地被删除时,sights将成为孤儿。
  2. 崩溃(高): 第22行的 isEmpty == false 会在运行时崩溃——请改用 !isEmpty
  3. 行为不正确(高): 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要求、模式设置和谓词过滤。