SwiftUI 開發者在狀態管理複雜性和已棄用 API 模式方面遇到困難。本技能提供基於事實的現代 SwiftUI 開發指導,使用 @Observable、正確的視圖組合,以及 iOS 26+ Liquid Glass 樣式。
下載技能 ZIP
在 Claude 中上傳
前往 設定 → 功能 → 技能 → 上傳技能
開啟並開始使用
測試它
正在使用「swiftui-expert-skill」。 Review this view: struct ProductView: View { @StateObject var vm: ProductViewModel; var body: some View { Text(vm.title) } }
預期結果:
發現的問題:(1) 使用 @StateObject 搭配 ObservableObject — 對於新程式碼,首選 @Observable 類別搭配 @State。(2) StateObject 應該是私有的。(3) 如果是唯讀,考慮將標題作為 let 參數傳遞。建議:使用 @Observable 類別,將 @State 標記為私有,直接傳遞唯讀值。
正在使用「swiftui-expert-skill」。 How do I handle navigation to a detail view when tapping a list row?
預期結果:
使用 NavigationStack 搭配 navigationDestination 進行類型安全的導航。在根層級用 NavigationStack 替換 NavigationView。使用帶有值參數的 NavigationLink 和 navigationDestination(for:) 修飾符。這與舊版 NavigationView 模式相比,提供了編譯時的安全性和正確的狀態管理。
安全審計
安全Static analyzer produced 226 false positive findings due to pattern matching on markdown documentation content. External command patterns matched file path references like 'references/state-management.md' and Swift code examples, not actual shell execution. Network finding was a GitHub source URL in YAML frontmatter. All blocker findings for cryptographic algorithms and system reconnaissance are incorrect pattern matches on documentation text. No executable code or security risks present.
品質評分
你能建構什麼
iOS 開發者構建新功能
在建立新的 SwiftUI 視圖時使用,確保使用 @Observable 進行正確的狀態管理,使用 foregroundStyle() 和 NavigationStack 等現代 API,並從一開始就建立最佳化的視圖結構。
現有 SwiftUI 專案的程式碼審查
在審計舊版 SwiftUI 程式碼時使用,識別已棄用的 API、不正確的效能反模式,以及現代化的機會。
學習現代 SwiftUI 模式
在從 UIKit 或舊版 SwiftUI 轉換時使用,學習當前資料流、視圖組合和 Apple 設計指南的最佳實踐。
試試這些提示
檢視此 SwiftUI 視圖的正確狀態管理和現代 API 使用。檢查屬性包裝器選擇、已棄用的 API 和視圖組合模式。
將此 SwiftUI 程式碼重構為使用現代 API。用 @Observable 替換 ObservableObject,更新已棄用的修飾符,並優化視圖結構以提高效能。
幫助我使用正確的資料流構建新的 SwiftUI 功能。使用 @Observable 設計狀態管理,為最佳差異化建構視圖,並在適當的情況下應用 iOS 26+ 樣式。
分析此 SwiftUI 視圖的效能問題。識別不必要的狀態更新、ForEach 中的視圖識別問題、熱路徑優化和佈局抖動原因。
最佳實務
- 對於新的 SwiftUI 程式碼,首選 @Observable 搭配 @MainActor 以確保執行緒安全
- 保持視圖主體簡單且純粹 — 將複雜邏輯提取到模型和子視圖中
- 在 ForEach 中使用穩定的識別,使用唯一識別碼,切勿對動態內容使用 .indices
避免
- 將傳入的值聲明為 @State 或 @StateObject,而不是使用 @Binding 或 let 參數
- 當存在 containerRelativeFrame 或 visualEffect 替代方案時仍使用 GeometryReader
- 直接在視圖主體中建立物件或執行重計算