我有一个模型,其中有一个名为myState
的布尔值,在控制器中,我像这样连接到它:
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
实际更改(切换)时触发,并且在设置时不获取初始下沉?