我有一个针对Signal的观察者,该Signal在我的应用程序中产生项目计数。理想情况下,我想跳过所有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 })
使用滤波器不会影响信号,而是将重点放在是否应观察传递的值上。