技能 swiftui-expert-skill
📱

swiftui-expert-skill

安全

使用專家最佳實踐構建現代 SwiftUI 應用

也可從以下取得: avdlee

SwiftUI 開發者在狀態管理複雜性和已棄用 API 模式方面遇到困難。本技能提供基於事實的現代 SwiftUI 開發指導,使用 @Observable、正確的視圖組合,以及 iOS 26+ Liquid Glass 樣式。

支援: Claude Codex Code(CC)
🥉 74 青銅
1

下載技能 ZIP

2

在 Claude 中上傳

前往 設定 → 功能 → 技能 → 上傳技能

3

開啟並開始使用

測試它

正在使用「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 模式相比,提供了編譯時的安全性和正確的狀態管理。

安全審計

安全
v1 • 2/25/2026

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.

1
已掃描檔案
276
分析行數
0
發現項
1
審計總數
未發現安全問題
審計者: claude

品質評分

38
架構
100
可維護性
87
內容
50
社群
100
安全
91
規範符合性

你能建構什麼

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
  • 直接在視圖主體中建立物件或執行重計算

常見問題

我應該在新 SwiftUI 專案中使用 @Observable 還是 ObservableObject?
對所有新程式碼使用 @Observable。它提供自動觀察而無需 @Published,與嵌套物件配合使用,並與 Swift 並發整合。僅在維護舊版程式碼時使用 ObservableObject。
我應該什麼時候使用 @Binding 與直接傳遞值?
當子視圖需要修改父視圖的狀態時使用 @Binding。對唯讀值使用 let。如果需要對變更做出反應但不需要修改,請使用 var 搭配 .onChange() 修飾符。
Liquid Glass 樣式是 iOS 應用程式的必需項嗎?
不,Liquid Glass 僅在 iOS 26+ 上可用,且僅在明確要求時才應採用。本技能提供使用 .ultraThinMaterial 的回退模式,適用於較早的 iOS 版本。
為什麼我的 ForEach 對動態陣列導致當機?
使用 .indices 作為識別在陣列順序變更時會失敗。始終使用穩定的唯一識別碼,如 id 屬性。對於動態內容,確保每個元素在更新期間具有一致的唯一識別。
如何除錯 SwiftUI 中意外的視圖重新渲染?
在視圖主體內新增 Self._printChanges() 以記錄觸發更新的內容。常見原因包括傳入大型配置物件、冗餘的狀態賦值,以及依賴經常變更的值。
此技能可以強制執行特定的架構(如 MVVM)嗎?
不,本技能專注於事實和最佳實踐,而不是架構意見。它鼓勵分離業務邏輯以提高可測試性,但不強制執行特定的模式(如 MVVM 或 VIPER)。

開發者詳情

檔案結構

📄 SKILL.md