Swift Expert

作者 jeffallan1be15d8064f8MIT11K 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫5 天前更新

Builds iOS/macOS/watchOS/tvOS applications, implements SwiftUI views and state management, designs protocol-oriented architectures, handles async/await concurrency, implements actors for thread safety, and debugs Swift-specific issues. Use when building iOS/macOS applications with Swift 5.9+, SwiftUI, or async/await concurrency. Invoke for protocol-oriented programming, SwiftUI state management, actors, server-side Swift, UIKit integration, Combine, or Vapor.

AI 產生的概覽

指導 Swift 5.9+ 的 Apple 平台開發,涵蓋 SwiftUI、async/await、actor、協定與測試。

功能
為在 iOS、macOS、watchOS 與 tvOS 上建置 Swift 應用程式提供結構化工作流程與參考指引。內容涵蓋 SwiftUI 檢視與狀態管理、協定導向架構、async/await 並行處理、actor 隔離、記憶體與效能,以及以 XCTest 為基礎的測試。產出包括程式碼模式、協定與模型定義、檢視實作、測試以及架構說明。
適用情境
適用於實作或除錯 Swift 5.9+ 程式碼時,尤其是 SwiftUI 介面、async/await 或 actor 並行處理、協定導向設計、UIKit 或 Combine 整合,以及使用 Vapor 的伺服器端 Swift。
執行需求
需要 Swift 5.9+ 工具鏈以及 swift build、swift test 等建置工具。僅附帶參考文件,不含指令碼。

Swift Expert

Core Workflow

  1. Architecture Analysis - Identify platform targets, dependencies, design patterns
  2. Design Protocols - Create protocol-first APIs with associated types
  3. Implement - Write type-safe code with async/await and value semantics
  4. Optimize - Profile with Instruments, ensure thread safety
  5. Test - Write comprehensive tests with XCTest and async patterns

Validation checkpoints: After step 3, run swift build to verify compilation. After step 4, run swift build -warnings-as-errors to surface actor isolation and Sendable warnings. After step 5, run swift test and confirm all async tests pass.

Reference Guide

Load detailed guidance based on context:

TopicReferenceLoad When
SwiftUIreferences/swiftui-patterns.mdBuilding views, state management, modifiers
Concurrencyreferences/async-concurrency.mdasync/await, actors, structured concurrency
Protocolsreferences/protocol-oriented.mdProtocol design, generics, type erasure
Memoryreferences/memory-performance.mdARC, weak/unowned, performance optimization
Testingreferences/testing-patterns.mdXCTest, async tests, mocking strategies

Code Patterns

async/await — Correct vs. Incorrect

swift
// ✅ DO: async/await with structured error handlingfunc fetchUser(id: String) async throws -> User {    let url = URL(string: "https://api.example.com/users/\(id)")!    let (data, _) = try await URLSession.shared.data(from: url)    return try JSONDecoder().decode(User.self, from: data)}
// ❌ DON'T: mixing completion handlers with async contextfunc fetchUser(id: String) async throws -> User {    return try await withCheckedThrowingContinuation { continuation in        // Avoid wrapping existing async APIs this way when a native async version exists        legacyFetch(id: id) { result in            continuation.resume(with: result)        }    }}

SwiftUI State Management

swift
// ✅ DO: use @Observable (Swift 5.9+) for view models@Observablefinal class CounterViewModel {    var count = 0    func increment() { count += 1 }}
struct CounterView: View {    @State private var vm = CounterViewModel()
    var body: some View {        VStack {            Text("\(vm.count)")            Button("Increment", action: vm.increment)        }    }}
// ❌ DON'T: reach for ObservableObject/Published when @Observable sufficesclass LegacyViewModel: ObservableObject {    @Published var count = 0  // Unnecessary boilerplate in Swift 5.9+}

Protocol-Oriented Architecture

swift
// ✅ DO: define capability protocols with associated typesprotocol Repository<Entity> {    associatedtype Entity: Identifiable    func fetch(id: Entity.ID) async throws -> Entity    func save(_ entity: Entity) async throws}
struct UserRepository: Repository {    typealias Entity = User    func fetch(id: UUID) async throws -> User { /* … */ }    func save(_ user: User) async throws { /* … */ }}
// ❌ DON'T: use classes as base types when a protocol fitsclass BaseRepository {  // Avoid class inheritance for shared behavior    func fetch(id: UUID) async throws -> Any { fatalError("Override required") }}

Actor for Thread Safety

swift
// ✅ DO: isolate mutable shared state in an actoractor ImageCache {    private var cache: [URL: UIImage] = [:]
    func image(for url: URL) -> UIImage? { cache[url] }    func store(_ image: UIImage, for url: URL) { cache[url] = image }}
// ❌ DON'T: use a class with manual lockingclass UnsafeImageCache {    private var cache: [URL: UIImage] = [:]    private let lock = NSLock()  // Error-prone; prefer actor isolation    func image(for url: URL) -> UIImage? {        lock.lock(); defer { lock.unlock() }        return cache[url]    }}

Constraints

MUST DO

  • Use type hints and inference appropriately
  • Follow Swift API Design Guidelines
  • Use async/await for asynchronous operations (see pattern above)
  • Ensure Sendable compliance for concurrency
  • Use value types (struct/enum) by default
  • Document APIs with markup comments (/// …)
  • Use property wrappers for cross-cutting concerns
  • Profile with Instruments before optimizing

MUST NOT DO

  • Use force unwrapping (!) without justification
  • Create retain cycles in closures
  • Mix synchronous and asynchronous code improperly
  • Ignore actor isolation warnings
  • Use implicitly unwrapped optionals unnecessarily
  • Skip error handling
  • Use Objective-C patterns when Swift alternatives exist
  • Hardcode platform-specific values

Output Templates

When implementing Swift features, provide:

  1. Protocol definitions and type aliases
  2. Model types (structs/classes with value semantics)
  3. View implementations (SwiftUI) or view controllers
  4. Tests demonstrating usage
  5. Brief explanation of architectural decisions

Maintained by @jeffallan, Principal Consultant at Synergetic Solutions

Documentation

來源與署名

來源:jeffallan/claude-skills位於skills/swift-expert提交1be15d8

授權條款: MIT

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架