Merge pull request #5 from rock-n-code/feature/dependency-service
Feature: Dependency service
This commit is contained in:
commit
12b3f696c2
@ -8,11 +8,16 @@ let package = Package(
|
|||||||
products: [
|
products: [
|
||||||
.library(
|
.library(
|
||||||
name: "Libraries",
|
name: "Libraries",
|
||||||
targets: ["APIService"]),
|
targets: [
|
||||||
|
"APIService",
|
||||||
|
"DependencyService"
|
||||||
|
]
|
||||||
|
),
|
||||||
],
|
],
|
||||||
dependencies: [],
|
dependencies: [],
|
||||||
targets: [
|
targets: [
|
||||||
.target(name: "APIService"),
|
.target(name: "APIService"),
|
||||||
|
.target(name: "DependencyService"),
|
||||||
.testTarget(
|
.testTarget(
|
||||||
name: "APIServiceTests",
|
name: "APIServiceTests",
|
||||||
dependencies: ["APIService"]
|
dependencies: ["APIService"]
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
//
|
||||||
|
// Dependency.swift
|
||||||
|
// DependencyService
|
||||||
|
//
|
||||||
|
// Created by Javier Cicchelli on 05/12/2022.
|
||||||
|
// Copyright © 2022 Röck+Cöde. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
@propertyWrapper
|
||||||
|
public struct Dependency<D> {
|
||||||
|
|
||||||
|
// MARK: Properties
|
||||||
|
|
||||||
|
private let keyPath: WritableKeyPath<DependencyStore, D>
|
||||||
|
|
||||||
|
// MARK: Computed
|
||||||
|
|
||||||
|
public var wrappedValue: D {
|
||||||
|
get { DependencyStore[keyPath] }
|
||||||
|
set { DependencyStore[keyPath] = newValue }
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Initialisers
|
||||||
|
|
||||||
|
public init(_ keyPath: WritableKeyPath<DependencyStore, D>) {
|
||||||
|
self.keyPath = keyPath
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// DependencyKey.swift
|
||||||
|
// DependencyService
|
||||||
|
//
|
||||||
|
// Created by Javier Cicchelli on 05/12/2022.
|
||||||
|
// Copyright © 2022 Röck+Cöde. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
public protocol DependencyKey {
|
||||||
|
|
||||||
|
// MARK: Associated types
|
||||||
|
|
||||||
|
associatedtype Value
|
||||||
|
|
||||||
|
// MARK: Properties
|
||||||
|
|
||||||
|
static var currentValue: Value { get set }
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// DependencyStore.swift
|
||||||
|
// DependencyService
|
||||||
|
//
|
||||||
|
// Created by Javier Cicchelli on 05/12/2022.
|
||||||
|
// Copyright © 2022 Röck+Cöde. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
public struct DependencyStore {
|
||||||
|
|
||||||
|
// MARK: Properties
|
||||||
|
|
||||||
|
private static var current = Self()
|
||||||
|
|
||||||
|
// MARK: Functions
|
||||||
|
|
||||||
|
public static subscript<K>(key: K.Type) -> K.Value where K: DependencyKey {
|
||||||
|
get { key.currentValue }
|
||||||
|
set { key.currentValue = newValue }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static subscript<D>(_ keyPath: WritableKeyPath<DependencyStore, D>) -> D {
|
||||||
|
get { current[keyPath: keyPath] }
|
||||||
|
set { current[keyPath: keyPath] = newValue }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user