我有一個帶有myStateBool 的模型,在一個控制器中,我像這樣沉迷于它:
model.$myState
.dropFirst()
.removeDuplicates()
.receive(on: RunLoop.main)
.sink { [weak self] myState in
print("myState: \(myState)")
}.store(in: &subs)
myState在 init 初始化為false:
@Published private(set) var myState:Bool = false
我試圖了解如何避免發生初始接收器觸發。我只希望接收器在myState更改值時呼叫。因此,如果在模型中我將其設定為 false 時已經是 false,我不希望接收器呼叫。我可以通過 實作這一點.removeDuplicates(),但我仍然收到初始接收器呼叫。然后我添加了.dropFirst(). 有了這個,我沒有得到初始的 sink 呼叫,但是,我第一次設定myState為false(當已經是 false 時)sink 被呼叫,即使它myState已經是 false。
所以,簡而言之:
myState我只希望接收器在從false -> true或從更改時觸發true to false- 不希望在我設定接收器時觸發接收器(dropFirst() 有效,但隨后我得到了初始的重復邊緣情況)。
如何設定接收器,使其僅在myState實際更改(切換)時觸發,并且在設定時不獲取初始接收器?
uj5u.com熱心網友回復:
如果我理解正確,您希望第一個值使其下沉為true. 我就是這種情況,你只需要交換dropFirst()和removeDuplicates()繞過:
model.$myState
.removeDuplicates()
.dropFirst()
.receive(on: RunLoop.main)
.sink { [weak self] myState in
print("myState: \(myState)")
}
.store(in: &subs)
uj5u.com熱心網友回復:
用于.scan將當前傳播的值與先前傳播的值(作為元組)配對。然后,您可以在后續運算子中決定如何處理元組,僅當該值由兩個不同的值組成時,才讓該值沿管道向下處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534964.html
標籤:ios迅速结合
上一篇:如何洗掉macOS中的所有命令?
