of运算

作者: 幸运的小强本人 | 来源:发表于2016-03-14 20:33 被阅读26次
/**
This method creates a new observable instance
with a variable number of elements.

see also:http://reactivex.io/documentation/operators/from.html

- parameter elements: Elements to generate
- parameter scheduler: Scheduler to send elements on. 
    If 'nil', elements are sent immediately on subscription
- returns: The observable sequence whose elements are pulled from the given arguments.
*/
public static func of(elements: E ..., scheduler: ImmediateSchedulerType? = nil)->Observable<E> {
    return Sequence(elements: elements, scheduler: scheduler)
}

class Sequence<E>: Producer<E> {
    private let _elements: [E]
    private let _scheduler: ImmediateSchedulerType?

    init(elements: [E], scheduler: ImmediateSchedulerType?) {
        _elements = elements
        _scheduler = scheduler
    }

    override func subscribe<O: ObserverType where O.E == E>(observer: O)->Disposable {
        // optimized version without scheduler
        guard _scheduler != nil else {
            for element in _elements {
                observer.on(.Next(element))
            }
            observer.on(.Completed)
            return NoDisposable.instance
        }

        let sink = SequenceSink(parent: self, observer: observer)
        sink.disposable = sink.run()
        return sink
    }
}

class SequenceSink<O: ObserverType>: Sink<O> {
    typealias Parent = Sequence<O.E>

    private let _parent: Parent

    init(parent: Parent, observer: O) {
        _parent = parent
        super.init(observer: observer)
    }

    func run()->Disposable {
        return _parent._scheduler!.scheduleRecursive( (0, _parent._elements)) { (state, recurse) in
            if state.0 < state.1.count {
                self.forwardOn(.Next(state.1[state.0]))
                recurse((state.0 + 1, state.1))
            }else {
                self.forwardOn(.Completed)
            }
        }
    }
}    

相关文章

  • 2、Swift 基础运算

    赋值运算 算数运算 余数运算 一元加减法运算 混合赋值运算 比较运算 三元运算 空合运算符 范围运算 逻辑运算

  • Python 入门之常用运算符

    Python中的运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算 1、常用运算符...

  • 黑猴子的家:Python 数据运算

    1、算术运算 2、比较运算 3、赋值运算 4、逻辑运算 5、成员运算 6、身份运算 7、位运算 code 8、运算...

  • 运算 & 运算符

    运算 & 运算符 算术运算 比较运算 比较运算的结果为bool值 赋值运算 逻辑运算 位运算 二进制的运算 身份检...

  • 2019-07-23

    R中的基本运算包括:算术运算、关系运算、逻辑运算、赋值运算以及其他运算。 算术运算:四则运算(+,-,*, /),...

  • JS 加、减、乘、除运算避免浮点数

    加法运算 减法运算 乘法运算 除法运算

  • 算术运算符

    算术运算符对数字(文字或变量)执行算术运算。 加法运算 减法运算 乘法运算 除法运算 余数运算 自增自减运算 指数...

  • JavaScript快速入门03-运算符

    JS的运算符 算数运算符 算数运算符用于对数值进行算数运算 运算符描述说明+加法运算-减法运算*乘法运算/除法运算...

  • 技术问 - 运算符有哪些

    算术运算符 赋值运算符 比较运算符 逻辑运算符 位运运算 三目运算符 算术运算符 赋值运算符 比较运算符(关系运算...

  • 逻辑运算,闭包

    算术运算(+-*/%)>比较运算(!==,>= ,<= , = =)>逻辑运算(&&,||)>赋值运算(=)...

网友评论

      本文标题:of运算

      本文链接:https://www.haomeiwen.com/subject/qciflttx.html