diff --git a/RxSwift/Observables/Implementations/Filter.swift b/RxSwift/Observables/Implementations/Filter.swift index 3f3f0133..937771b9 100644 --- a/RxSwift/Observables/Implementations/Filter.swift +++ b/RxSwift/Observables/Implementations/Filter.swift @@ -9,14 +9,15 @@ import Foundation class FilterSink: Sink, ObserverType { + typealias Predicate = (Element) throws -> Bool typealias Element = O.E typealias Parent = Filter - private let _parent: Parent + private let _predicate: Predicate - init(parent: Parent, observer: O) { - _parent = parent + init(predicate: Predicate, observer: O) { + _predicate = predicate super.init(observer: observer) } @@ -24,7 +25,7 @@ class FilterSink: Sink, ObserverType { switch event { case .Next(let value): do { - let satisfies = try _parent._predicate(value) + let satisfies = try _predicate(value) if satisfies { forwardOn(.Next(value)) } @@ -52,7 +53,7 @@ class Filter : Producer { } override func run(observer: O) -> Disposable { - let sink = FilterSink(parent: self, observer: observer) + let sink = FilterSink(predicate: _predicate, observer: observer) sink.disposable = _source.subscribe(sink) return sink } diff --git a/RxSwift/Observables/Implementations/Map.swift b/RxSwift/Observables/Implementations/Map.swift index 035b7273..fbf85f98 100644 --- a/RxSwift/Observables/Implementations/Map.swift +++ b/RxSwift/Observables/Implementations/Map.swift @@ -9,14 +9,15 @@ import Foundation class MapSink : Sink, ObserverType { + typealias Selector = (SourceType) throws -> ResultType + typealias ResultType = O.E typealias Element = SourceType - typealias Parent = Map + + private let _selector: Selector - private let _parent: Parent - - init(parent: Parent, observer: O) { - _parent = parent + init(selector: Selector, observer: O) { + _selector = selector super.init(observer: observer) } @@ -24,7 +25,7 @@ class MapSink : Sink, ObserverType { switch event { case .Next(let element): do { - let mappedElement = try _parent._selector(element) + let mappedElement = try _selector(element) forwardOn(.Next(mappedElement)) } catch let e { @@ -42,16 +43,18 @@ class MapSink : Sink, ObserverType { } class MapWithIndexSink : Sink, ObserverType { + typealias Selector = (SourceType, Int) throws -> ResultType + typealias ResultType = O.E typealias Element = SourceType typealias Parent = MapWithIndex - private let _parent: Parent + private let _selector: Selector private var _index = 0 - init(parent: Parent, observer: O) { - _parent = parent + init(selector: Selector, observer: O) { + _selector = selector super.init(observer: observer) } @@ -59,7 +62,7 @@ class MapWithIndexSink : Sink, ObserverType { switch event { case .Next(let element): do { - let mappedElement = try _parent._selector(element, try incrementChecked(&_index)) + let mappedElement = try _selector(element, try incrementChecked(&_index)) forwardOn(.Next(mappedElement)) } catch let e { @@ -89,7 +92,7 @@ class MapWithIndex : Producer { } override func run(observer: O) -> Disposable { - let sink = MapWithIndexSink(parent: self, observer: observer) + let sink = MapWithIndexSink(selector: _selector, observer: observer) sink.disposable = _source.subscribe(sink) return sink } @@ -124,7 +127,7 @@ class Map: Producer { } override func run(observer: O) -> Disposable { - let sink = MapSink(parent: self, observer: observer) + let sink = MapSink(selector: _selector, observer: observer) sink.disposable = _source.subscribe(sink) return sink }