--- paths: - "**/*.swift" - "**/Package.swift" --- # Swift Patterns > This file extends [common/patterns.md](../common/patterns.md) with Swift specific content. ## Protocol-Oriented Design Define small, focused protocols. Use protocol extensions for shared defaults: ```swift protocol Repository: Sendable { associatedtype Item: Identifiable & Sendable func find(by id: Item.ID) async throws -> Item? func save(_ item: Item) async throws } ``` ## Value Types - Use structs for data transfer objects and models - Use enums with associated values to model distinct states: ```swift enum LoadState: Sendable { case idle case loading case loaded(T) case failed(Error) } ``` ## Actor Pattern Use actors for shared mutable state instead of locks or dispatch queues: ```swift actor Cache { private var storage: [Key: Value] = [:] func get(_ key: Key) -> Value? { storage[key] } func set(_ key: Key, value: Value) { storage[key] = value } } ``` ## Dependency Injection Inject protocols with default parameters — production uses defaults, tests inject mocks: ```swift struct UserService { private let repository: any UserRepository init(repository: any UserRepository = DefaultUserRepository()) { self.repository = repository } } ``` ## References See skill: `swift-actor-persistence` for actor-based persistence patterns. See skill: `swift-protocol-di-testing` for protocol-based DI and testing.