@@ -35,15 +35,7 @@ public final class Station<State: StationState, Action: Sendable>: StateYieldPol
3535
3636 // MARK: Properties
3737
38- /// The current state of the station.
39- ///
40- /// Since ``Dripper/Dripper/State`` is a class type, it's referenced by both ``Station`` and ``StateHandler``.
41- public private( set) var state : State
42-
43- private let stateStorage : StateStorage < State , Action >
44-
45- private let continuation : AsyncStream < State > . Continuation
46- private var task : Task < Void , Never > ?
38+ private let state : StateStorage < State , Action >
4739
4840 // MARK: Lifecycle
4941
@@ -62,42 +54,25 @@ public final class Station<State: StationState, Action: Sendable>: StateYieldPol
6254 }
6355
6456 init < D: Dripper > ( state: D . State , dripper: D ) where D. State == State , D. Action == Action {
65- self . state = state
66-
6757 let stateStorage = StateStorage ( initialState: state, dripper: dripper)
68- self . stateStorage = stateStorage
69- self . continuation = stateStorage. continuation
70-
71- // Update `state` as `StateHandler`'s `state` is updated.
72- self . task = Task { @MainActor [ weak self] in
73- guard let stateStream = await self ? . stateStorage. stream else { return }
74- for await state in stateStream {
75- guard let self else { break }
76- self . state = state
77- }
78- }
58+ self . state = stateStorage
7959 }
8060
81- deinit {
82- task? . cancel ( )
83- }
61+ deinit { }
8462
8563 // MARK: Functions
8664
8765 public func pour( _ action: Action ) {
8866 Task {
89- await stateStorage . pour ( action)
67+ await state . pour ( action)
9068 }
9169 }
9270
9371 public subscript< Member> (
94- dynamicMember dynamicMember: ReferenceWritableKeyPath < State , Member >
72+ dynamicMember dynamicMember: ReferenceWritableKeyPath < StateStorage < State , Action > , Member >
9573 ) -> Member {
9674 get { state [ keyPath: dynamicMember] }
97- set {
98- state [ keyPath: dynamicMember] = newValue
99- continuation. yield ( state)
100- }
75+ set { state [ keyPath: dynamicMember] = newValue }
10176 }
10277}
10378
@@ -106,15 +81,14 @@ import SwiftUI
10681
10782extension Station {
10883 public func bind< Member> (
109- _ dynamicMember: ReferenceWritableKeyPath < State , Member >
84+ _ dynamicMember: ReferenceWritableKeyPath < StateStorage < State , Action > , Member >
11085 ) -> Binding < Member > {
11186 Binding (
11287 get: {
11388 self . state [ keyPath: dynamicMember]
11489 } ,
11590 set: { newValue in
11691 self . state [ keyPath: dynamicMember] = newValue
117- self . continuation. yield ( self . state)
11892 }
11993 )
12094 }
0 commit comments