在RxSwift中手动发出事件

dum*_*307 14 ios reactive-cocoa swift rx-swift

我是RxSwift的新手,需要一个非常基本的帮助.
假设我有一个Observable并按这样订阅它.

 let source: Observable<Void> = Observable.create { [weak self] observer in

        guard let _ = self else {
            observer.on(.Completed)
            return NopDisposable.instance
        }

        observer.on(.Next())

        return AnonymousDisposable {

        }
    }
Run Code Online (Sandbox Code Playgroud)

订阅如下:

 source.subscribeNext { () -> Void in

    }
Run Code Online (Sandbox Code Playgroud)

问题是:如何在每次需要时手动将事件发送到subscribeNext.这就像rx_tap行为一样UIButton.
我在示例中看到代码有这样的东西source = button.rx_tap.asObservale().之后,每次用户点击按钮时,都会在subscribeNext()上发出一个事件并触发.我也希望这种行为,但在程序上,而不是从UI事件.

tom*_*ahh 17

大多数情况下,你可以编写你的observable,我即将给出的解决方案不是推荐的Rx代码.

您可以查看Subject来实现您请求的行为.主题有多种变体,文档解释得很好.

一个示例用法,灵感来自RxSwift的游乐场:

let subject = PublishSubject<String>()

_ = subject.subscribeNext { content in
    print(content)
}
subject.on(.Next("a"))
subject.on(.Next("b"))
Run Code Online (Sandbox Code Playgroud)

这将打印"a"然后"b".

有关何时使用主题的更多详细信息,我建议您阅读本文.

  • 您可以在主题上调用`asObservable()`,以将其作为`Ob​​servable`。 (2认同)