ios - 在 RxSwift 中手动发出事件

标签 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。这类似于 UIButton 上的 rx_tap 行为。
我在示例代码中看到类似这样的内容 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 .

关于ios - 在 RxSwift 中手动发出事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36043122/

相关文章:

iOS8 实现具有动态高度的 heightForRowAtIndexPath

ios - 背景 View 中的视频背景

objective-c - RACSignal : how to reduce on arbitrarily large combine

ios - 最新的 ReactiveCocoa Carthage 错误 : No such module 'Result'

ios - Reactive Cocoa 中超时的实现是否正确?

ios - 无法使用 iOS Estimote Indoor SDK 手动创建位置

ios - 从代码访问 TableView 标题

ios - 将 JSON 字符串从一个 View 传递到另一个 View

ios - 按下按钮时,Thread1 :EXC_BAD_ACCESS(code=1, 地址 = 0X48)

swift - 无法将类型 'Int' 的值转换为预期参数类型 'UInt'