--- paths: - "**/*.swift" - "**/Package.swift" --- # Swift 程式碼風格 (Coding Style) > 本檔案擴展了 [common/coding-style.md](../common/coding-style.md),包含 Swift 特定內容。 ## 格式化 (Formatting) - 使用 **SwiftFormat** 進行自動格式化,使用 **SwiftLint** 強制執行風格規範。 - `swift-format` 已與 Xcode 16+ 綁定,可作為替代方案。 ## 不可變性 (Immutability) - 優先使用 `let` 而非 `var` — 將所有內容定義為 `let`,只有在編譯器要求時才改為 `var`。 - 預設使用具備值語義 (Value semantics) 的 `struct`;只有在需要標識 (Identity) 或引用語義 (Reference semantics) 時才使用 `class`。 ## 命名 (Naming) 遵循 [Apple API 設計指引 (Apple API Design Guidelines)](https://www.swift.org/documentation/api-design-guidelines/): - 使用處應清晰明確 — 省略不必要的詞彙。 - 根據角色命名方法與屬性,而非根據型別。 - 對於常數,優先使用 `static let` 而非全域常數。 ## 錯誤處理 (Error Handling) 使用型別化抛出 (Typed throws, Swift 6+) 與模式匹配 (Pattern matching): ```swift func load(id: String) throws(LoadError) -> Item { guard let data = try? read(from: path) else { throw .fileNotFound(id) } return try decode(data) } ``` ## 併發 (Concurrency) 啟用 Swift 6 嚴格併發檢查。優先使用: - 跨越隔離邊界的數據使用 `Sendable` 值型別。 - 共享的可變狀態使用 Actors。 - 優先使用結構化併發 (`async let`, `TaskGroup`),而非非結構化的 `Task {}`。