我很难理解RxSwift的方法论。
我将展示一个虚构的示例,该示例实际上与我的现实世界问题无关,也许人们可以为我解决问题。
想象一个向导在他的《魔法书》中有十二个法术位的巫师。 这些咒语中的大多数都处于阻挡状态,例如火球发射后,我必须等待它被击中或吹出。但是,敌方巫师可以压制玛格琳琳的抛光法术军团,然后我需要将其关闭。
向导书本身是一段C ++代码,它提供:
基本上,我想存储一个布尔legionOfSigmarinesRunning
来知道该咒语是否正在运行,并根据回调对其进行修改,但还要记住该咒语使用哪个咒语槽。
我发现我应该使用BehaviorRelay<Int>
来记住咒语插槽,并使用BehaviorRelay<bool>
来判断咒语是否在运行。
我不知道如何模拟缺少拼字槽的情况,改为使用BehaviorRelay<Int>?
来禁止,这听起来很奇怪,但会抑制对布尔值的需求。
我在初始化过程中迷失了:我应该使用以下形式的调用来设置BehaviorRelay变量:
让mySpellSlot = 0
myRelay = BehaviorRelay(mySpellSlot)
每次巫师施放咒语?我应该将其定义为:
let invalidSpellSlot = -1
myRelay = BehaviorRelay(invalidSpellSlot)
然后在我启动一个新咒语时调用onNext(newSlotValue),如果该咒语被驱散了,newSlotValue可以为-1?
我要完全做错吗?
我只关心孤独的抛光法术,因此,我将永远知道myRelay
是该法术,而不是另一个法术,在这方面,我将无视其他回调。