在RxSwift中手动发出事件

时间:2016-03-16 17:44:11

标签: ios swift reactive-cocoa 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 {

        }
    }

订阅如下:

 source.subscribeNext { () -> Void in

    }

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

2 个答案:

答案 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)