将Observable分配给另一个

时间:2018-03-29 20:06:09

标签: swift rx-swift

我有这个对象TryOut,初始化时,它每2 seconds执行一次私有方法。在该方法 func execute()中,internalStream是一个Observable<Int>类型的局部变量,它捕获我希望向外界发送的数据。

  

问题在于,即使internalStream正在分配给成员资产public var outsideStream: Observable<Int>?,订阅outsideStream也不会发生任何事件。为什么呢?那背后有什么理由吗?

工作案例

唯一可行的方法是将闭包作为成员属性public var broadcast:((Observable<Int>) -> ())? = nil,并通过执行此execute

broadcast?(internalStream)方法中提升它

可以在此gist中找到示例代码。谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

对于这种情况,当您想要自己制作活动时,最好使用*Subject提供的任何RxSwift

例如:

outputStream声明更改为:

public var outsideStream = PublishSubject<Int>()

以正确的方式制作活动:

@objc private func execute() {
    currentIndex += 1

    if currentIndex < data.count {
        outsideStream.onNext(data[currentIndex])
    }

    guard currentIndex + 1 > data.count && timer.isValid else { return }
    outsideStream.onCompleted()
    timer.invalidate()
}

用法:

let participant = TryOut()
participant.outsideStream
    .subscribe(
        onNext: { print("income index:", $0) },
        onCompleted: { print("stream completed") }
    )
    .disposed(by: bag)

为您提供输出:

income index: 1
income index: 2
income index: 3
income index: 4
income index: 5
stream completed

P.S。此外,还有另一种方法可以通过RxSwiftExt库使用(或重现)retry方法来实现这一目的。