如何限制生产者发出具有 属性 现有值的事件?

How to limit producers from emitting events with property's existing value?

设置 MutableProperty 的值是否会导致生产者发出具有相同值的新事件?

换句话说,如果我不想要具有相同值的新事件,我需要这样做 != 检查吗?

let really = MutableProperty<Bool>(false)

func updateReality(newReality: Bool) {
    if really.value != newReality {
        really.value = newReality
    }
}

属性总是发送新值,即使它与旧值相同。它必须是这种方式,否则你不能将它用于非 Equatable 类型。但是如果你正在处理一个 Equatable 类型,比如 Bool,那么你可以在你的 属性 上使用 skipRepeats operator 来创建一个新的 属性,它只接收新值,然后将 属性 公开给消费者:

let really = MutableProperty<Bool>(false)
let reallyWithNoRepeats = really.skipRepeats()

因此您可以通过 really.value 更新值,但消费者订阅 reallyWithNoRepeats 只能获取新值。