@@ -15,22 +15,29 @@ infix operator <~ : BindingPrecedence
15
15
public protocol BindingSourceProtocol {
16
16
associatedtype Value
17
17
associatedtype Error : Swift . Error
18
-
18
+
19
19
/// Observe the binding source by sending any events to the given observer.
20
20
@discardableResult
21
- func observe( _ observer: Observer < Value , Error > ) -> Disposable ?
21
+ func observe( _ observer: Observer < Value , Error > , during lifetime : Lifetime ) -> Disposable ?
22
22
}
23
23
24
- extension Signal : BindingSourceProtocol { }
24
+ extension Signal : BindingSourceProtocol {
25
+ @discardableResult
26
+ public func observe( _ observer: Observer , during lifetime: Lifetime ) -> Disposable ? {
27
+ return self . take ( during: lifetime) . observe ( observer)
28
+ }
29
+ }
25
30
26
31
extension SignalProducer : BindingSourceProtocol {
27
32
@discardableResult
28
- public func observe( _ observer: Observer < Value , Error > ) -> Disposable ? {
33
+ public func observe( _ observer: ProducedSignal . Observer , during lifetime : Lifetime ) -> Disposable ? {
29
34
var disposable : Disposable !
30
35
31
- startWithSignal { signal, signalDisposable in
32
- disposable = signalDisposable
33
- signal. observe ( observer)
36
+ self
37
+ . take ( during: lifetime)
38
+ . startWithSignal { signal, signalDisposable in
39
+ disposable = signalDisposable
40
+ signal. observe ( observer)
34
41
}
35
42
36
43
return disposable
@@ -93,12 +100,8 @@ public func <~
93
100
} else {
94
101
observer = Observer ( value: { [ weak target] in target? . consume ( $0) } )
95
102
}
96
-
97
- let disposable = source. observe ( observer)
98
- if let disposable = disposable {
99
- target. lifetime. ended. observeCompleted { disposable. dispose ( ) }
100
- }
101
- return disposable
103
+
104
+ return source. observe ( observer, during: target. lifetime)
102
105
}
103
106
104
107
/// Binds a source to a target, updating the target's value to the latest
@@ -146,11 +149,7 @@ public func <~
146
149
observer = Observer ( value: { [ weak target] in target? . consume ( Target . Value ( reconstructing: $0) ) } )
147
150
}
148
151
149
- let disposable = source. observe ( observer)
150
- if let disposable = disposable {
151
- target. lifetime. ended. observeCompleted { disposable. dispose ( ) }
152
- }
153
- return disposable
152
+ return source. observe ( observer, during: target. lifetime)
154
153
}
155
154
156
155
/// A binding target that can be used with the `<~` operator.
0 commit comments