Swift Combine是否将相同值的连续写入合并到@Published var



如果我将相同的值连续两次或两次以上分配给ObservableObject@Published成员,是两次/所有写入都会导致观察者/接收器接收到具有相同值的更新,还是Combine会抑制实际上没有更改值的分配的更新?

答案是否定的。每次在属性上设置值时,@Published属性都会发送一条更改消息:

import Combine

class ModelObject: ObservableObject {
@Published var publishedProperty: Int = 0
}
let observeMe = ModelObject()
let subscription = observeMe
.$publishedProperty
.scan(0) { counter, _ in
counter + 1
}
.sink {
print("The number of changes is ($0)")
}
observeMe.publishedProperty = 1
observeMe.publishedProperty = 2
observeMe.publishedProperty = 2
observeMe.publishedProperty = 3

打印:

The number of changes is 1
The number of changes is 2
The number of changes is 3
The number of changes is 4
The number of changes is 5

第一个更改是属性(0(的原始值,然后以下四个更改中的每一个都会导致发布者发送事件,即使该属性多次设置为值2也是如此。

最新更新