@@ -2,7 +2,7 @@ import ReactiveSwift
2
2
3
3
internal class ScopedLoopBox < RootState, RootEvent, ScopedState, ScopedEvent> : LoopBoxBase < ScopedState , ScopedEvent > {
4
4
override var producer : SignalProducer < ScopedState , Never > {
5
- root. producer. map ( value )
5
+ root. producer. map ( extract )
6
6
}
7
7
8
8
override var lifetime : Lifetime {
@@ -11,20 +11,20 @@ internal class ScopedLoopBox<RootState, RootEvent, ScopedState, ScopedEvent>: Lo
11
11
12
12
/// Loop Internal SPI
13
13
override var _current : ScopedState {
14
- root. _current [ keyPath : value ]
14
+ extract ( root. _current)
15
15
}
16
16
17
17
private let root : LoopBoxBase < RootState , RootEvent >
18
- private let value : KeyPath < RootState , ScopedState >
18
+ private let extract : ( RootState ) -> ScopedState
19
19
private let eventTransform : ( ScopedEvent ) -> RootEvent
20
20
21
21
init (
22
22
root: LoopBoxBase < RootState , RootEvent > ,
23
- value: KeyPath < RootState , ScopedState > ,
23
+ value: @escaping ( RootState ) -> ScopedState ,
24
24
event: @escaping ( ScopedEvent ) -> RootEvent
25
25
) {
26
26
self . root = root
27
- self . value = value
27
+ self . extract = value
28
28
self . eventTransform = event
29
29
}
30
30
@@ -33,12 +33,14 @@ internal class ScopedLoopBox<RootState, RootEvent, ScopedState, ScopedEvent>: Lo
33
33
}
34
34
35
35
override func scoped< S, E> (
36
- to scope: KeyPath < ScopedState , S > ,
36
+ to scope: @escaping ( ScopedState ) -> S ,
37
37
event: @escaping ( E ) -> ScopedEvent
38
38
) -> LoopBoxBase < S , E > {
39
+ let extract = self . extract
40
+
39
41
return ScopedLoopBox < RootState , RootEvent , S , E > (
40
42
root: self . root,
41
- value: value . appending ( path : scope) ,
43
+ value: { scope ( extract ( $0 ) ) } ,
42
44
event: { [ eventTransform] in eventTransform ( event ( $0) ) }
43
45
)
44
46
}
@@ -75,7 +77,7 @@ internal class RootLoopBox<State, Event>: LoopBoxBase<State, Event> {
75
77
}
76
78
77
79
override func scoped< S, E> (
78
- to scope: KeyPath < State , S > ,
80
+ to scope: @escaping ( State ) -> S ,
79
81
event: @escaping ( E ) -> Event
80
82
) -> LoopBoxBase < S , E > {
81
83
ScopedLoopBox ( root: self , value: scope, event: event)
@@ -108,7 +110,7 @@ internal class LoopBoxBase<State, Event> {
108
110
func send( _ event: Event ) { subclassMustImplement ( ) }
109
111
110
112
func scoped< S, E> (
111
- to scope: KeyPath < State , S > ,
113
+ to scope: @escaping ( State ) -> S ,
112
114
event: @escaping ( E ) -> Event
113
115
) -> LoopBoxBase < S , E > {
114
116
subclassMustImplement ( )
0 commit comments