@@ -287,28 +287,19 @@ public extension SignalType {
287287 /// Splits the signal into two signals. The first signal in the tuple matches the
288288 /// predicate, the second signal does not match the predicate
289289 public func partition( _ predicate: @escaping ( Value ) -> Bool ) -> ( Signal < Value , ErrorType > , Signal < Value , ErrorType > ) {
290- let left = Signal < Value , ErrorType > { observer in
291- return self . on { ( event: Event < Value , ErrorType > ) -> Void in
292- guard let value = event. value else {
293- observer. sendEvent ( event)
294- return
295- }
296-
297- if predicate ( value) {
298- observer. sendNext ( value)
299- }
290+ let ( left, leftObserver) = Signal < Value , ErrorType > . pipe ( )
291+ let ( right, rightObserver) = Signal < Value , ErrorType > . pipe ( )
292+ self . on { ( event: Event < Value , ErrorType > ) -> Void in
293+ guard let value = event. value else {
294+ leftObserver. sendEvent ( event)
295+ rightObserver. sendEvent ( event)
296+ return
300297 }
301- }
302- let right = Signal < Value , ErrorType > { observer in
303- return self . on { ( event: Event < Value , ErrorType > ) -> Void in
304- guard let value = event. value else {
305- observer. sendEvent ( event)
306- return
307- }
308-
309- if !predicate( value) {
310- observer. sendNext ( value)
311- }
298+
299+ if predicate ( value) {
300+ leftObserver. sendNext ( value)
301+ } else {
302+ rightObserver. sendNext ( value)
312303 }
313304 }
314305 return ( left, right)
0 commit comments