在 RxSwift 中手动发出事件
Emit an event manually in RxSwift
我是 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
对 UIButton
的行为。
我在示例代码中看到类似 source = button.rx_tap.asObservale()
的内容。之后,每次用户点击按钮时,都会发出一个事件并触发 subscribeNext()。我也想有这种行为,但以编程方式,而不是来自 UI 事件。
大多数时候,您可以编写您的可观察对象,而我将要提供的解决方案并不是推荐的 Rx 代码方式。
您可以查看 Subject 以实现您请求的行为。主题有多种变体,文档解释得很好。
示例用法,灵感来自 RxSwift 的 playground:
let subject = PublishSubject<String>()
_ = subject.subscribeNext { content in
print(content)
}
subject.on(.Next("a"))
subject.on(.Next("b"))
这将打印 "a"
然后 "b"
。
有关何时使用主题或不使用主题的更多详细信息,我建议阅读 this article。
对于Driver,你可以
var isSearching: Driver<Bool>
isSearching = Driver.just(true)
我是 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
对 UIButton
的行为。
我在示例代码中看到类似 source = button.rx_tap.asObservale()
的内容。之后,每次用户点击按钮时,都会发出一个事件并触发 subscribeNext()。我也想有这种行为,但以编程方式,而不是来自 UI 事件。
大多数时候,您可以编写您的可观察对象,而我将要提供的解决方案并不是推荐的 Rx 代码方式。
您可以查看 Subject 以实现您请求的行为。主题有多种变体,文档解释得很好。
示例用法,灵感来自 RxSwift 的 playground:
let subject = PublishSubject<String>()
_ = subject.subscribeNext { content in
print(content)
}
subject.on(.Next("a"))
subject.on(.Next("b"))
这将打印 "a"
然后 "b"
。
有关何时使用主题或不使用主题的更多详细信息,我建议阅读 this article。
对于Driver,你可以
var isSearching: Driver<Bool>
isSearching = Driver.just(true)