我有一个观察者反对在我的应用程序中产生项目计数的信号。理想情况下,我想跳过所有0的值,我试图使用以下代码片段:
viewModel.itemCount.signal
.skipRepeats()
.skip(while: { itemCount -> Bool in return itemCount == 0 })
.observeValues { itemCount in
print("Item count: \(itemCount)") // Will still print 0
}
不幸的是,它仍然允许值0通过。
所以我的方法是不正确的,因为skip(while:)
仅适用于信号的开始。由于初始值满足其标准,信号被允许继续,并且未来忽略skip(while:)
检查。
正确的调用是filter(:)
命令,如下所示:
.filter({ itemCount -> Bool in return itemCount != 0 })
使用滤波器不会影响信号,而是关注您是否应该观察传递的值。