Ios 在RxSwift中手动发出事件
我是RxSwift的新手,需要非常基本的帮助。Ios 在RxSwift中手动发出事件,ios,swift,reactive-cocoa,rx-swift,Ios,Swift,Reactive Cocoa,Rx Swift,我是RxSwift的新手,需要非常基本的帮助。 假设我有一个可观察的,并像这样订阅它 let source: Observable<Void> = Observable.create { [weak self] observer in guard let _ = self else { observer.on(.Completed) return NopDisposable.instance }
假设我有一个可观察的,并像这样订阅它
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 {
}
}
问题是:如何在每次需要时手动将事件发送到subscribeNext。这类似于ui按钮上的rx\u点击行为
我在示例代码中看到类似这样的东西source=button.rx\u tap.asObservale()
。之后,每次用户点击按钮,都会在subscribeNext()上发出一个事件和触发器。我也希望有这种行为,但以编程方式,而不是从UI事件。大多数情况下,您可以组合您的可观察对象,我将给出的解决方案不是执行Rx代码的推荐方法
您可以查看以实现您请求的行为。这个主题有多种变体,文档对此进行了很好的解释
受RxSwift启发的示例用法:
let subject=PublishSubject()
_=subject.subscribeNext{中的内容
打印(内容)
}
主题。关于(.Next(“a”))
主题。关于(.Next(“b”))
这将打印“a”
,然后打印“b”
有关何时使用主题或不使用主题的更多详细信息,我建议阅读。对于驱动程序,您可以这样做
var isSearching: Driver<Bool>
isSearching = Driver.just(true)
var正在搜索:驱动程序
isSearching=Driver.just(true)
Hi@tomah,您的解决方案有效。然而,你提到它“不是推荐的方式”的原因是什么?如果将它与AnyObserver
和AnyObserver
进行比较,我们可以像这样使用它:
var beginLoad:AnyObserver?
beginLoad=AnyObserver(eventHandler:{(event)->Void in print(“1234543”)}
beginLoad.on(.Next())
另外,PublishSubject()
不是一个可观察的
,所以我们不能在它上面使用操作符(flatten,concat…)。你可以调用主题上的asObservable()
来获得它作为一个可观察的
。主题最常用于包装命令式API。您通常会在已有的可观测数据的基础上进行合成(rx_-tap就是一个很好的例子)。我建议阅读,虽然不是swift,但这对解释何时使用主题有很大帮助。是的,我知道主题如何发出事件。非常感谢@tomah。剩下的是学习选择要使用的主题的正确类型:)。
let subject = PublishSubject<String>()
_ = subject.subscribeNext { content in
print(content)
}
subject.on(.Next("a"))
subject.on(.Next("b"))
var isSearching: Driver<Bool>
isSearching = Driver.just(true)