Files
everything-claude-code/docs/zh-CN/rules/swift/patterns.md
zdoc.app ada4cd75a3 docs(zh-CN): sync Chinese docs with latest upstream changes (#304)
* docs(zh-CN): sync Chinese docs with latest upstream changes

* update

---------

Co-authored-by: neo <neo.dowithless@gmail.com>
2026-03-02 22:28:27 -08:00

1.5 KiB
Raw Blame History

paths
paths
**/*.swift
**/Package.swift

Swift 模式

此文件使用 Swift 特定内容扩展了 common/patterns.md

面向协议的设计

定义小型、专注的协议。使用协议扩展来提供共享的默认实现:

protocol Repository: Sendable {
    associatedtype Item: Identifiable & Sendable
    func find(by id: Item.ID) async throws -> Item?
    func save(_ item: Item) async throws
}

值类型

  • 使用结构体struct作为数据传输对象和模型
  • 使用带有关联值的枚举enum来建模不同的状态
enum LoadState<T: Sendable>: Sendable {
    case idle
    case loading
    case loaded(T)
    case failed(Error)
}

Actor 模式

使用 actor 来处理共享可变状态,而不是锁或调度队列:

actor Cache<Key: Hashable & Sendable, Value: Sendable> {
    private var storage: [Key: Value] = [:]

    func get(_ key: Key) -> Value? { storage[key] }
    func set(_ key: Key, value: Value) { storage[key] = value }
}

依赖注入

使用默认参数注入协议 —— 生产环境使用默认值,测试时注入模拟对象:

struct UserService {
    private let repository: any UserRepository

    init(repository: any UserRepository = DefaultUserRepository()) {
        self.repository = repository
    }
}

参考

查看技能:swift-actor-persistence 以了解基于 actor 的持久化模式。 查看技能:swift-protocol-di-testing 以了解基于协议的依赖注入和测试。