gpt4 book ai didi

swift - 如何使用 RxSwift 手动发出事件(即制作 EventEmitter)?

转载 作者:搜寻专家 更新时间:2023-11-01 06:06:07 25 4
gpt4 key购买 nike

如何使用 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。这应该会让你度过最初的不适和沮丧的“驼峰”。虽然我肯定听说过你,这是一种不同的思维方式,但完全值得克服第一个障碍。坚持下去。

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)
}
}

关于swift - 如何使用 RxSwift 手动发出事件(即制作 EventEmitter)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36994434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com