简体   繁体   中英

Emit an event manually in RxSwift

I'm a newbie in RxSwift and need a very basic help.
Assump that I have an Observable and subscribe it like this.

 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 {

        }
    }

And the subscribe like this:

 source.subscribeNext { () -> Void in

    }

The question is: how can I emit the event to subscribeNext manually every time I need. This is like rx_tap behavior on UIButton .
I see in the example code has something like this source = button.rx_tap.asObservale() . After that, every time user tap to button, there will emit an event and trigger on subscribeNext(). I also want to have that behavior but in programmatically, not from UI event.

Most of the time, you can compose your observable and the solution I'm about to give is not the recommended way to do Rx code.

You can look at Subject to implement the behavior you request. There are multiple variations on subject, that the documentation explains well.

An example usage, inspired from RxSwift's playground :

let subject = PublishSubject<String>()

_ = subject.subscribeNext { content in
    print(content)
}
subject.on(.Next("a"))
subject.on(.Next("b"))

This will print "a" then "b" .

For more detail about when to use subject or not, I'd recommend reading this article .

For a Driver, you can do

var isSearching: Driver<Bool>

isSearching = Driver.just(true)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM