我有一个有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()
实现这一点。但是我还是得到了初始的sink调用。所以我添加了.dropFirst()
。在里面我没有得到初始的sink调用,但是,我第一次将myState
设置为false
(当已经为false时)时,即使myState
已经为false,也会调用sink。
所以,简而言之:
- 我只希望接收器在
myState
从false -> true
或从true to false
更改时触发 - 我不希望在设置接收器时触发接收器(dropFirst()可以工作,但随后我会得到初始的重复边缘情况)。
如何设置接收器,使其仅在myState
实际更改(切换)时触发,并且在设置时不获取初始接收器?
1条答案
按热度按时间tcomlyy61#
如果我没理解错的话,第一个使它下沉的值应该是
true
,如果是这样的话,只需交换一下dropFirst()
和removeDuplicates()
: