我有这个对象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中找到示例代码。谢谢您的帮助。
答案 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
方法来实现这一目的。