@@ -62,8 +62,8 @@ import SwiftUI
62
62
///
63
63
public struct AtomRoot < Content: View > : View {
64
64
private var storage : Storage
65
- private var overrides = [ OverrideKey : any OverrideProtocol ] ( )
66
65
private var observers = [ Observer] ( )
66
+ private var overrideContainer = OverrideContainer ( )
67
67
private let content : Content
68
68
69
69
/// Creates an atom root with the specified content that will be allowed to use atoms.
@@ -93,16 +93,16 @@ public struct AtomRoot<Content: View>: View {
93
93
switch storage {
94
94
case . managed:
95
95
Managed (
96
- overrides: overrides,
97
96
observers: observers,
97
+ overrideContainer: overrideContainer,
98
98
content: content
99
99
)
100
100
101
101
case . unmanaged( let store) :
102
102
Scope (
103
103
store: store,
104
- overrides: overrides,
105
104
observers: observers,
105
+ overrideContainer: overrideContainer,
106
106
content: content
107
107
)
108
108
}
@@ -114,7 +114,7 @@ public struct AtomRoot<Content: View>: View {
114
114
/// - Parameter onUpdate: A closure to handle a snapshot of recent updates.
115
115
///
116
116
/// - Returns: The self instance.
117
- public func observe( _ onUpdate: @escaping @ MainActor @Sendable ( Snapshot ) -> Void ) -> Self {
117
+ public func observe( _ onUpdate: @MainActor @escaping ( Snapshot ) -> Void ) -> Self {
118
118
mutating ( self ) { $0. observers. append ( Observer ( onUpdate: onUpdate) ) }
119
119
}
120
120
@@ -128,8 +128,8 @@ public struct AtomRoot<Content: View>: View {
128
128
/// - value: A value to be used instead of the atom's value.
129
129
///
130
130
/// - Returns: The self instance.
131
- public func override< Node: Atom > ( _ atom: Node , with value: @escaping @ MainActor @Sendable ( Node ) -> Node . Produced ) -> Self {
132
- mutating ( self ) { $0. overrides [ OverrideKey ( atom) ] = Override ( getValue : value) }
131
+ public func override< Node: Atom > ( _ atom: Node , with value: @MainActor @escaping ( Node ) -> Node . Produced ) -> Self {
132
+ mutating ( self ) { $0. overrideContainer . addOverride ( for : atom, with : value) }
133
133
}
134
134
135
135
/// Overrides the atoms with the given value.
@@ -144,8 +144,8 @@ public struct AtomRoot<Content: View>: View {
144
144
/// - value: A value to be used instead of the atom's value.
145
145
///
146
146
/// - Returns: The self instance.
147
- public func override< Node: Atom > ( _ atomType: Node . Type , with value: @escaping @ MainActor @Sendable ( Node ) -> Node . Produced ) -> Self {
148
- mutating ( self ) { $0. overrides [ OverrideKey ( atomType) ] = Override ( getValue : value) }
147
+ public func override< Node: Atom > ( _ atomType: Node . Type , with value: @MainActor @escaping ( Node ) -> Node . Produced ) -> Self {
148
+ mutating ( self ) { $0. overrideContainer . addOverride ( for : atomType, with : value) }
149
149
}
150
150
}
151
151
@@ -156,8 +156,8 @@ private extension AtomRoot {
156
156
}
157
157
158
158
struct Managed : View {
159
- let overrides : [ OverrideKey : any OverrideProtocol ]
160
159
let observers : [ Observer ]
160
+ let overrideContainer : OverrideContainer
161
161
let content : Content
162
162
163
163
@State
@@ -168,17 +168,17 @@ private extension AtomRoot {
168
168
var body : some View {
169
169
Scope (
170
170
store: store,
171
- overrides: overrides,
172
171
observers: observers,
172
+ overrideContainer: overrideContainer,
173
173
content: content
174
174
)
175
175
}
176
176
}
177
177
178
178
struct Scope : View {
179
179
let store : AtomStore
180
- let overrides : [ OverrideKey : any OverrideProtocol ]
181
180
let observers : [ Observer ]
181
+ let overrideContainer : OverrideContainer
182
182
let content : Content
183
183
184
184
@State
@@ -189,8 +189,8 @@ private extension AtomRoot {
189
189
let store = StoreContext . registerRoot (
190
190
in: store,
191
191
scopeKey: scopeKey,
192
- overrides : overrides ,
193
- observers : observers
192
+ observers : observers ,
193
+ overrideContainer : overrideContainer
194
194
)
195
195
196
196
state. unregister = {
0 commit comments