【发布时间】:2022-11-16 06:22:47
【问题描述】:
我有一个模型,它有一个 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 更改值时调用。因此,如果在模型中我将其设置为 false 时已经是 false,我不希望接收器调用。我可以通过 .removeDuplicates() 实现这一点,但我仍然收到初始接收器调用。然后我添加了.dropFirst()。有了这个,我没有得到初始的接收器调用,但是,我第一次将 myState 设置为 false(当已经为 false 时)调用接收器,即使 myState 已经是 false。
所以,简而言之:
- 我只想在
myState从false -> true或true to false更改时触发接收器 - 不希望在我设置接收器时触发接收器(dropFirst() 有效,但随后我得到了初始的重复边缘情况)。
如何设置接收器,使其仅在 myState 实际更改(切换)时触发,并且在设置时不获取初始接收器?
【问题讨论】: