DependenciesMacro

用于方便使用 swift-dependencies 的宏

用法

import Dependencies
import DependenciesMacro

@PublicInit
@Dependencies
public struct TestClient {
    public var request: @Sendable (_ request: Request) -> Void
}

@DependencyValue(TestClient.self)
public extension DependencyValues {}

@PublicInit 是一个成员宏,提供一个公共初始化器。该宏只能应用于公共结构体。
@Dependencies 是一个扩展宏,可以将 TestClient 遵循 TestDependencyKey 协议。该宏也只能应用于结构体。
@DependencyValue 是一个成员宏;通过使用该宏扩展 DependencyValues,你可以添加一个参数中指定类型的属性。

在此示例中,宏扩展如下所示。

public struct TestClient {
    public var request: @Sendable (_ request: Request) -> Void
    public init(
        request: @Sendable @escaping (_ request: Request) -> Void
    ) {
        self.request = request
    }
}
extension TestClient: TestDependencyKey {
    public static let testValue = TestClient(
        request: unimplemented("\(Self.self).request")
    )
}

public extension DependencyValues {
    var testClient: TestClient {
        get {
            self[TestClient.self]
        }
        set {
            self[TestClient.self] = newValue
        }
    }
}

安装

该库只能通过 Swift 包管理器安装。

.package(url: "https://github.com/Ryu0118/swift-dependencies-macro", from: "0.2.2")