0001    //
0002    //  SingleAsync.swift
0003    //  Rx
0004    //
0005    //  Created by Junior B. on 09/11/15.
0006    //  Copyright © 2015 Krunoslav Zaher. All rights reserved.
0007    //
0008    
0009    import Foundation
0010    
0011    class SingleAsyncSink
SingleAsync.swift:72
        let sink = SingleAsyncSink(parent: self, observer: observer)
<ElementType
SingleAsync.swift:12
    typealias Parent = SingleAsync<ElementType>
SingleAsync.swift:13
    typealias E = ElementType
, O
SingleAsync.swift:11
class SingleAsyncSink<ElementType, O: ObserverType where O.E == ElementType> : Sink<O>, ObserverType {
SingleAsync.swift:18
    init(parent: Parent, observer: O) {
: ObserverType where O.E == ElementType> : Sink<O>, ObserverType { 0012 typealias Parent
SingleAsync.swift:15
    private let _parent: Parent
SingleAsync.swift:18
    init(parent: Parent, observer: O) {
= SingleAsync<ElementType> 0013 typealias E
SingleAsync.swift:23
    func on(event: Event<E>) {
= ElementType 0014 0015 private let _parent
SingleAsync.swift:19
        _parent = parent
SingleAsync.swift:27
                let forward = try _parent._predicate?(value) ?? true
: Parent 0016 private var _seenValue
SingleAsync.swift:38
            if _seenValue == false {
SingleAsync.swift:40
                _seenValue = true
SingleAsync.swift:50
            if (!_seenValue) {
: Bool = false 0017 0018 init
SingleAsync.swift:72
        let sink = SingleAsyncSink(parent: self, observer: observer)
(parent: Parent, observer: O) { 0019 _parent = parent 0020 super.init(observer: observer) 0021 } 0022 0023 func on(event: Event<E>) { 0024 switch event { 0025 case .Next(let value): 0026 do { 0027 let forward = try _parent._predicate?(value) ?? true 0028 if !forward { 0029 return 0030 } 0031 } 0032 catch let error { 0033 forwardOn(.Error(error as ErrorType)) 0034 dispose() 0035 return 0036 } 0037 0038 if _seenValue == false { 0039 forwardOn(.Next(value)) 0040 _seenValue = true 0041 } else { 0042 forwardOn(.Error(RxError.MoreThanOneElement)) 0043 dispose() 0044 } 0045 0046 case .Error: 0047 forwardOn(event) 0048 dispose() 0049 case .Completed: 0050 if (!_seenValue) { 0051 forwardOn(.Error(RxError.NoElements)) 0052 } else { 0053 forwardOn(.Completed) 0054 } 0055 dispose() 0056 } 0057 } 0058 } 0059 0060 class SingleAsync
Observable+StandardSequenceOperators.swift:305
        return SingleAsync(source: asObservable())
Observable+StandardSequenceOperators.swift:320
        return SingleAsync(source: asObservable(), predicate: predicate)
SingleAsync.swift:12
    typealias Parent = SingleAsync<ElementType>
<Element
SingleAsync.swift:60
class SingleAsync<Element>: Producer<Element> {
SingleAsync.swift:61
    typealias Predicate = (Element) throws -> Bool
SingleAsync.swift:63
    private let _source: Observable<Element>
SingleAsync.swift:66
    init(source: Observable<Element>, predicate: Predicate? = nil) {
SingleAsync.swift:71
    override func run<O : ObserverType where O.E == Element>(observer: O) -> Disposable {
>: Producer<Element> { 0061 typealias Predicate
SingleAsync.swift:64
    private let _predicate: Predicate?
SingleAsync.swift:66
    init(source: Observable<Element>, predicate: Predicate? = nil) {
= (Element) throws -> Bool 0062 0063 private let _source
SingleAsync.swift:67
        _source = source
SingleAsync.swift:73
        sink.disposable = _source.subscribe(sink)
: Observable<Element> 0064 private let _predicate
SingleAsync.swift:27
                let forward = try _parent._predicate?(value) ?? true
SingleAsync.swift:68
        _predicate = predicate
: Predicate? 0065 0066 init
Observable+StandardSequenceOperators.swift:305
        return SingleAsync(source: asObservable())
Observable+StandardSequenceOperators.swift:320
        return SingleAsync(source: asObservable(), predicate: predicate)
(source: Observable<Element>, predicate: Predicate? = nil) { 0067 _source = source 0068 _predicate = predicate 0069 } 0070 0071 override func run<O : ObserverType where O.E == Element>(observer: O) -> Disposable { 0072 let sink = SingleAsyncSink(parent: self, observer: observer) 0073 sink.disposable = _source.subscribe(sink) 0074 return sink 0075 } 0076 }