swiftdata-pro

swiftdata-pro

熱門

撰寫、審查並改善 SwiftData 程式碼,使用現代 API 與最佳實務。適用於閱讀、撰寫或審查使用 SwiftData 的專案。

373星標
17分支
更新於 2026/3/11
SKILL.md
readonlyread-only
name
swiftdata-pro
description

撰寫、審查並改善 SwiftData 程式碼,使用現代 API 與最佳實務。適用於閱讀、撰寫或審查使用 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 需求、schema 設定與謂詞過濾。