@@ -7,8 +7,10 @@ import ReactiveSwift
7
7
@available ( macOS 10 . 15 , iOS 13 . 0 , tvOS 13 . 0 , watchOS 6 . 0 , * )
8
8
@propertyWrapper
9
9
public struct EnvironmentLoop < State, Event> : DynamicProperty {
10
- @Environment ( \. loops [ LoopType ( Loop< State, Event> . self ) ] )
11
- var erasedLoop : AnyObject ?
10
+ static var loopType : LoopType { LoopType ( Loop< State, Event> . self ) }
11
+
12
+ @Environment ( \. loops)
13
+ var erasedLoops : [ LoopType : AnyObject ]
12
14
13
15
@ObservedObject
14
16
private var subscription : SwiftUIHotSwappableSubscription < State , Event >
@@ -19,7 +21,7 @@ public struct EnvironmentLoop<State, Event>: DynamicProperty {
19
21
}
20
22
21
23
public var projectedValue : LoopBinding < State , Event > {
22
- guard let loop = erasedLoop as! Loop < State , Event > ? else {
24
+ guard let loop = erasedLoops [ Self . loopType ] as! Loop < State , Event > ? else {
23
25
fatalError ( " Scoped bindings can only be created inside the view body. " )
24
26
}
25
27
@@ -34,7 +36,7 @@ public struct EnvironmentLoop<State, Event>: DynamicProperty {
34
36
}
35
37
36
38
public mutating func update( ) {
37
- guard let loop = erasedLoop as! Loop < State , Event > ? else {
39
+ guard let loop = erasedLoops [ Self . loopType ] as! Loop < State , Event > ? else {
38
40
fatalError ( " Expect parent view to inject a `Loop< \( State . self) , \( Event . self) >` through `View.environmentLoop(_:)`. Found none. " )
39
41
}
40
42
0 commit comments