如何使用 RxSwift 手动发出事件(即制作 EventEmitter)?
How do I emit events manually (i.e., make an EventEmitter) using RxSwift?
如何使用 RxSwift 实现事件发射器? (一个可以发出数据的对象,该数据由订阅它的其他对象使用。)
在阅读了 Rx 文档和示例之后,我觉得自己像个彻头彻尾的白痴,并且对于如何手动将事件从 Observers 发送到 Observables 仍然非常困惑。我的理解是我们有一些 Observable 可以向订阅该 Observable 的所有观察者发送带有数据的事件。但是,我对 Swift.
中的实际实现方式一无所知。
这是我正在尝试实现的示例:
class VendingMachine {
let dispenser = Observable<Drink>
// Notify all subscribed Observers that this machine dispensed a drink.
func dispenseDrink(item: Drink) {
dispenser.onNext(item)
}
}
还有第二个文件:
class MachineReporter: Observer {
let dispenser = VendingMachine().dispenser
init() {
dispenser.subscribe(self)
}
onNext { drink in
print("Vending machine dispensed a drink: \(drink)"
}
}
我脑子炸了。我现在只想切换到像 EmitterKit 这样的专业库,因为我显然误解了它是如何工作的。
但我需要弄清楚 Rx 是如何工作的,否则我会发疯的。求助!
我很困惑你打算用 MachineReporter
做什么,所以我的代码只是解决了让它工作的问题,尽管它可能不是很有用。
我强烈建议您仔细阅读 RxSwift Playground examples 并确保您对这些内容感到满意。您的问题特别涉及 Subject
s。这应该会让您克服最初 "hump" 的不适和沮丧。虽然我肯定听说过你,这是一种不同的思维方式,但完全值得克服第一个障碍。坚持下去。
class VendingMachine {
let dispenser = PublishSubject<Drink>()
func dispenseDrink(item: Drink) {
dispenser.onNext(item)
}
}
class MachineReporter {
let disposeBag = DisposeBag()
let dispenser = VendingMachine().dispenser
init() {
dispenser.asObservable()
.subscribeNext { drink in
print("Vending machine dispensed a drink: \(drink)")
}
.addDisposableTo(disposeBag)
}
}
应该为此使用 Subject
。
A Subject is a special form of an Observable Sequence, you can
subscribe to and add elements to it. There are 4
kinds of Subjects in RxSwift
http://reactivex.io/documentation/subject.html
我建议在这里开始使用 PublishSubject。
let observable = PublishSubject<SomeTypeOrEvent>()
observable.subscribe(onNext: { (SomeTypeOrEvent) in
self.doSomethingWithEvent(something: SomeTypeOrEvent)
}).addDisposableTo(disposeBag)
...
// emits some type/event
observerable.onNext(SomeTypeOrEvent)
如何使用 RxSwift 实现事件发射器? (一个可以发出数据的对象,该数据由订阅它的其他对象使用。)
在阅读了 Rx 文档和示例之后,我觉得自己像个彻头彻尾的白痴,并且对于如何手动将事件从 Observers 发送到 Observables 仍然非常困惑。我的理解是我们有一些 Observable 可以向订阅该 Observable 的所有观察者发送带有数据的事件。但是,我对 Swift.
中的实际实现方式一无所知。这是我正在尝试实现的示例:
class VendingMachine {
let dispenser = Observable<Drink>
// Notify all subscribed Observers that this machine dispensed a drink.
func dispenseDrink(item: Drink) {
dispenser.onNext(item)
}
}
还有第二个文件:
class MachineReporter: Observer {
let dispenser = VendingMachine().dispenser
init() {
dispenser.subscribe(self)
}
onNext { drink in
print("Vending machine dispensed a drink: \(drink)"
}
}
我脑子炸了。我现在只想切换到像 EmitterKit 这样的专业库,因为我显然误解了它是如何工作的。
但我需要弄清楚 Rx 是如何工作的,否则我会发疯的。求助!
我很困惑你打算用 MachineReporter
做什么,所以我的代码只是解决了让它工作的问题,尽管它可能不是很有用。
我强烈建议您仔细阅读 RxSwift Playground examples 并确保您对这些内容感到满意。您的问题特别涉及 Subject
s。这应该会让您克服最初 "hump" 的不适和沮丧。虽然我肯定听说过你,这是一种不同的思维方式,但完全值得克服第一个障碍。坚持下去。
class VendingMachine {
let dispenser = PublishSubject<Drink>()
func dispenseDrink(item: Drink) {
dispenser.onNext(item)
}
}
class MachineReporter {
let disposeBag = DisposeBag()
let dispenser = VendingMachine().dispenser
init() {
dispenser.asObservable()
.subscribeNext { drink in
print("Vending machine dispensed a drink: \(drink)")
}
.addDisposableTo(disposeBag)
}
}
应该为此使用 Subject
。
A Subject is a special form of an Observable Sequence, you can subscribe to and add elements to it. There are 4 kinds of Subjects in RxSwift
http://reactivex.io/documentation/subject.html
我建议在这里开始使用 PublishSubject。
let observable = PublishSubject<SomeTypeOrEvent>()
observable.subscribe(onNext: { (SomeTypeOrEvent) in
self.doSomethingWithEvent(something: SomeTypeOrEvent)
}).addDisposableTo(disposeBag)
...
// emits some type/event
observerable.onNext(SomeTypeOrEvent)