我有一个带有myStateBool 的模型,在控制器中我像这样沉入其中:
model.$myState
.dropFirst()
.removeDuplicates()
.receive(on: RunLoop.main)
.sink { [weak self] myState in
print("myState: \(myState)")
}.store(in: &subs)
Run Code Online (Sandbox Code Playgroud)
myState在 init 处初始化为false:
@Published private(set) var myState:Bool = false
Run Code Online (Sandbox Code Playgroud)
我试图了解如何避免初始接收器触发的发生。我只希望接收器在值更改时调用myState。因此,如果在模型中我将其设置为 false(当已经为 false 时),我不希望接收器调用。我可以通过使用 来实现这一点.removeDuplicates(),但我仍然收到初始接收器调用。所以然后我添加了.dropFirst(). 这样,我没有得到初始接收器调用,但是,第一次我设置myState为false(当已经为假时)接收器时,即使myState已经为假,也会被调用。
所以,简而言之:
myState我只希望接收器在更改false -> true时触发true to false如何设置接收器,使其仅在myState实际更改(切换)时触发,并且在设置时不获取初始接收器?
如果我理解正确,您期望第一个值使其下沉为true。在这种情况下,您只需交换dropFirst()即可removeDuplicates():
model.$myState
.removeDuplicates()
.dropFirst()
.receive(on: RunLoop.main)
.sink { [weak self] myState in
print("myState: \(myState)")
}
.store(in: &subs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1714 次 |
| 最近记录: |