15

我是 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 {

        }
    }

订阅是这样的:

 source.subscribeNext { () -> Void in

    }

问题是:我怎样才能在每次需要时手动发出事件来 subscribeNext。这就像rx_tap. 我在示例代码中看到类似这样的内容。之后,每次用户点击按钮时,都会发出一个事件并在 subscribeNext() 上触发。我也希望有这种行为,但以编程方式,而不是来自 UI 事件。UIButton
source = button.rx_tap.asObservale()

4

2 回答 2

19

大多数时候,你可以编写你的 observable,而我将要给出的解决方案并不是推荐的 Rx 代码方法。

您可以查看Subject以实现您请求的行为。主题有多种变体,文档对此进行了很好的解释。

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

let subject = PublishSubject<String>()

_ = subject.subscribeNext { content in
    print(content)
}
subject.on(.Next("a"))
subject.on(.Next("b"))

"a"这将打印出来"b"

有关何时使用主题的更多详细信息,我建议阅读这篇文章

于 2016-03-16T18:30:41.390 回答
1

对于司机,你可以做

var isSearching: Driver<Bool>

isSearching = Driver.just(true)
于 2017-01-04T20:41:13.070 回答