我是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事件。
答案 0 :(得分:16)
大多数情况下,你可以编写你的observable,我即将给出的解决方案不是推荐的Rx代码。
您可以查看Subject来实施您请求的行为。主题有多种变体,文档解释不错。
一个示例用法,灵感来自RxSwift的playground:
import os
import glob
import pandas as pd
def get_merged_csv(flist, **kwargs):
return pd.concat([pd.read_csv(f, **kwargs) for f in flist], ignore_index=True)
path =r'C:\DRO\DCL_rawdata_files' # use your path
fmask = os.path.join(path, '*.csv')
allFiles = sorted(glob.glob(fmask), key=os.path.getmtime)
frame = get_merged_csv(allFiles[:-1], index_col=None, header=0)
这将打印let subject = PublishSubject<String>()
_ = subject.subscribeNext { content in
print(content)
}
subject.on(.Next("a"))
subject.on(.Next("b"))
然后"a"
。
有关何时使用主题的详细信息,我建议您阅读this article。
答案 1 :(得分:0)
对于驱动程序,您可以执行
var isSearching: Driver<Bool>
isSearching = Driver.just(true)