0001
0009 import Foundation
0010
0011 class WithLatestFromSink| WithLatestFrom.swift:72 | typealias Parent = WithLatestFromSink<FirstType, SecondType, ResultType, O> |
| WithLatestFrom.swift:120 | let sink = WithLatestFromSink(parent: self, observer: observer) |
<FirstType| WithLatestFrom.swift:17 | typealias Parent = WithLatestFrom<FirstType, SecondType, ResultType> |
| WithLatestFrom.swift:18 | typealias E = FirstType |
, SecondType| WithLatestFrom.swift:17 | typealias Parent = WithLatestFrom<FirstType, SecondType, ResultType> |
| WithLatestFrom.swift:23 | private var _latest: SecondType? |
, ResultType| WithLatestFrom.swift:17 | typealias Parent = WithLatestFrom<FirstType, SecondType, ResultType> |
, O| WithLatestFrom.swift:12 | : Sink<O> |
| WithLatestFrom.swift:25 | init(parent: Parent, observer: O) { |
: ObserverType where O.E == ResultType>
0012 : Sink<O>
0013 , ObserverType
0014 , LockOwnerType
0015 , SynchronizedOnType {
0016
0017 typealias Parent| WithLatestFrom.swift:20 | private let _parent: Parent |
| WithLatestFrom.swift:25 | init(parent: Parent, observer: O) { |
= WithLatestFrom<FirstType, SecondType, ResultType>
0018 typealias E| WithLatestFrom.swift:41 | func on(event: Event<E>) { |
| WithLatestFrom.swift:45 | func _synchronized_on(event: Event<E>) { |
= FirstType
0019
0020 private let _parent| WithLatestFrom.swift:26 | _parent = parent |
| WithLatestFrom.swift:35 | sndSubscription.disposable = _parent._second.subscribe(sndO) |
| WithLatestFrom.swift:36 | let fstSubscription = _parent._first.subscribe(self) |
| WithLatestFrom.swift:50 | let res = try _parent._resultSelector(value, latest) |
: Parent
0021
0022 var _lock| WithLatestFrom.swift:80 | return _parent._lock |
= NSRecursiveLock()
0023 private var _latest| WithLatestFrom.swift:48 | guard let latest = _latest else { return } |
| WithLatestFrom.swift:96 | _parent._latest = value |
: SecondType?
0024
0025 init| WithLatestFrom.swift:120 | let sink = WithLatestFromSink(parent: self, observer: observer) |
(parent: Parent, observer: O) {
0026 _parent = parent
0027
0028 super.init(observer: observer)
0029 }
0030
0031 func run| WithLatestFrom.swift:121 | sink.disposable = sink.run() |
() -> Disposable {
0032 let sndSubscription = SingleAssignmentDisposable()
0033 let sndO = WithLatestFromSecond(parent: self, disposable: sndSubscription)
0034
0035 sndSubscription.disposable = _parent._second.subscribe(sndO)
0036 let fstSubscription = _parent._first.subscribe(self)
0037
0038 return StableCompositeDisposable.create(fstSubscription, sndSubscription)
0039 }
0040
0041 func on(event: Event<E>) {
0042 synchronizedOn(event)
0043 }
0044
0045 func _synchronized_on(event: Event<E>) {
0046 switch event {
0047 case let .Next(value):
0048 guard let latest = _latest else { return }
0049 do {
0050 let res = try _parent._resultSelector(value, latest)
0051
0052 forwardOn(.Next(res))
0053 } catch let e {
0054 forwardOn(.Error(e))
0055 dispose()
0056 }
0057 case .Completed:
0058 forwardOn(.Completed)
0059 dispose()
0060 case let .Error(error):
0061 forwardOn(.Error(error))
0062 dispose()
0063 }
0064 }
0065 }
0066
0067 class WithLatestFromSecond| WithLatestFrom.swift:33 | let sndO = WithLatestFromSecond(parent: self, disposable: sndSubscription) |
<FirstType| WithLatestFrom.swift:72 | typealias Parent = WithLatestFromSink<FirstType, SecondType, ResultType, O> |
, SecondType| WithLatestFrom.swift:72 | typealias Parent = WithLatestFromSink<FirstType, SecondType, ResultType, O> |
| WithLatestFrom.swift:73 | typealias E = SecondType |
, ResultType| WithLatestFrom.swift:72 | typealias Parent = WithLatestFromSink<FirstType, SecondType, ResultType, O> |
, O| WithLatestFrom.swift:72 | typealias Parent = WithLatestFromSink<FirstType, SecondType, ResultType, O> |
: ObserverType where O.E == ResultType>
0068 : ObserverType
0069 , LockOwnerType
0070 , SynchronizedOnType {
0071
0072 typealias Parent| WithLatestFrom.swift:75 | private let _parent: Parent |
| WithLatestFrom.swift:84 | init(parent: Parent, disposable: Disposable) { |
= WithLatestFromSink<FirstType, SecondType, ResultType, O>
0073 typealias E| WithLatestFrom.swift:89 | func on(event: Event<E>) { |
| WithLatestFrom.swift:93 | func _synchronized_on(event: Event<E>) { |
= SecondType
0074
0075 private let _parent| WithLatestFrom.swift:80 | return _parent._lock |
| WithLatestFrom.swift:85 | _parent = parent |
| WithLatestFrom.swift:96 | _parent._latest = value |
| WithLatestFrom.swift:100 | _parent.forwardOn(.Error(error)) |
| WithLatestFrom.swift:101 | _parent.dispose() |
: Parent
0076 private let _disposable| WithLatestFrom.swift:86 | _disposable = disposable |
| WithLatestFrom.swift:98 | _disposable.dispose() |
: Disposable
0077
0078 var _lock: NSRecursiveLock {
0079 get {
0080 return _parent._lock
0081 }
0082 }
0083
0084 init| WithLatestFrom.swift:33 | let sndO = WithLatestFromSecond(parent: self, disposable: sndSubscription) |
(parent: Parent, disposable: Disposable) {
0085 _parent = parent
0086 _disposable = disposable
0087 }
0088
0089 func on(event: Event<E>) {
0090 synchronizedOn(event)
0091 }
0092
0093 func _synchronized_on(event: Event<E>) {
0094 switch event {
0095 case let .Next(value):
0096 _parent._latest = value
0097 case .Completed:
0098 _disposable.dispose()
0099 case let .Error(error):
0100 _parent.forwardOn(.Error(error))
0101 _parent.dispose()
0102 }
0103 }
0104 }
0105
0106 class WithLatestFrom| Observable+Multiple.swift:316 | return WithLatestFrom(first: asObservable(), second: second.asObservable(), resultSelector: resultSelector) |
| Observable+Multiple.swift:328 | return WithLatestFrom(first: asObservable(), second: second.asObservable(), resultSelector: { $1 }) |
| WithLatestFrom.swift:17 | typealias Parent = WithLatestFrom<FirstType, SecondType, ResultType> |
<FirstType| WithLatestFrom.swift:107 | typealias ResultSelector = (FirstType, SecondType) throws -> ResultType |
| WithLatestFrom.swift:109 | private let _first: Observable<FirstType> |
| WithLatestFrom.swift:113 | init(first: Observable<FirstType>, second: Observable<SecondType>, resultSelector: ResultSelector) { |
, SecondType| WithLatestFrom.swift:107 | typealias ResultSelector = (FirstType, SecondType) throws -> ResultType |
| WithLatestFrom.swift:110 | private let _second: Observable<SecondType> |
| WithLatestFrom.swift:113 | init(first: Observable<FirstType>, second: Observable<SecondType>, resultSelector: ResultSelector) { |
, ResultType| WithLatestFrom.swift:106 | class WithLatestFrom<FirstType, SecondType, ResultType>: Producer<ResultType> { |
| WithLatestFrom.swift:107 | typealias ResultSelector = (FirstType, SecondType) throws -> ResultType |
| WithLatestFrom.swift:119 | override func run<O : ObserverType where O.E == ResultType>(observer: O) -> Disposable { |
>: Producer<ResultType> {
0107 typealias ResultSelector| WithLatestFrom.swift:111 | private let _resultSelector: ResultSelector |
| WithLatestFrom.swift:113 | init(first: Observable<FirstType>, second: Observable<SecondType>, resultSelector: ResultSelector) { |
= (FirstType, SecondType) throws -> ResultType
0108
0109 private let _first| WithLatestFrom.swift:36 | let fstSubscription = _parent._first.subscribe(self) |
| WithLatestFrom.swift:114 | _first = first |
: Observable<FirstType>
0110 private let _second| WithLatestFrom.swift:35 | sndSubscription.disposable = _parent._second.subscribe(sndO) |
| WithLatestFrom.swift:115 | _second = second |
: Observable<SecondType>
0111 private let _resultSelector| WithLatestFrom.swift:50 | let res = try _parent._resultSelector(value, latest) |
| WithLatestFrom.swift:116 | _resultSelector = resultSelector |
: ResultSelector
0112
0113 init| Observable+Multiple.swift:316 | return WithLatestFrom(first: asObservable(), second: second.asObservable(), resultSelector: resultSelector) |
| Observable+Multiple.swift:328 | return WithLatestFrom(first: asObservable(), second: second.asObservable(), resultSelector: { $1 }) |
(first: Observable<FirstType>, second: Observable<SecondType>, resultSelector: ResultSelector) {
0114 _first = first
0115 _second = second
0116 _resultSelector = resultSelector
0117 }
0118
0119 override func run<O : ObserverType where O.E == ResultType>(observer: O) -> Disposable {
0120 let sink = WithLatestFromSink(parent: self, observer: observer)
0121 sink.disposable = sink.run()
0122 return sink
0123 }
0124 }