如何使用RxSwift实现事件发射器? (可以发出由订阅它的其他对象使用的数据的对象。)
在浏览了Rx文档和示例之后,我觉得自己是一个完全白痴,我仍然非常困惑如何从Observers手动发出事件到Observables。我的理解是我们有一些Observable可以向所有订阅Observable的观察者发出带有数据的事件。但是,我对如何在Swift中实现它没有任何想法。
以下是我尝试实施的一个例子:
class MachineReporter: Observer {
let dispenser = VendingMachine().dispenser
init() {
dispenser.subscribe(self)
}
onNext { drink in
print("Vending machine dispensed a drink: \(drink)"
}
}
第二个档案:
{{1}}
我的大脑被炸了。我现在只是想切换到像EmitterKit这样的专业图书馆,因为我明显误解了它是如何工作的。
但我需要弄清楚Rx是如何工作的,否则我会发疯。救命啊!
答案 0 :(得分:3)
我对您计划使用MachineReporter
的内容感到非常困惑,所以我的代码只是解决了它的工作原理,尽管它可能不太有用。
我强烈建议你通过RxSwift Playground examples并确保你对这些感到满意。您的问题特别涉及Subject
。这应该让你超过最初的"驼峰"不舒服和沮丧。我确实听到了你的观点,但这是一种不同的思维方式,但它完全值得推过第一道障碍。坚持下去。
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)
}
}
答案 1 :(得分:1)
此处应使用Subject
。
主题是可观察序列的特殊形式,你可以 订阅并添加元素。有4个 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)