我有一个型号,它有一个myState
Bool,在控制器中,我是这样处理它的:
model.$myState
.dropFirst()
.removeDuplicates()
.receive(on: RunLoop.main)
.sink { [weak self] myState in
print("myState: \(myState)")
}.store(in: &subs)
myState
在初始化时被初始化为false
:
@Published private(set) var myState:Bool = false
我正在努力理解如何避免最初的下沉触发事件发生.我只想让接收器在myState
个值更改时调用.因此,如果在已经为假的情况下在模型中将其设置为假,我不希望接收器调用.我可以通过.removeDuplicates()
来实现这一点,但我仍然会收到初始的接收器调用.所以我加了.dropFirst()
.有了它,我没有得到初始的接收器调用,但是,当我第一次将myState
设置为false
(当已经为假)时,即使myState
已经是假的,接收器也会被调用.
因此,简而言之:
- 我只希望接收从
false -> true
或true to false
更改为myState
时触发 - 我不希望在设置接收器时触发接收器(dropFirst()有效,但随后我得到了初始的重复边情况).
如何设置接收器,使其仅在myState
实际更改(切换)时才触发,并且在设置时不会获得初始接收器?