0

我有出版商

@Published var feedData = Feed()

还有这段代码,它监听它

// some View 
.onReceive(feed.$feedData) { feedData in
            if feedData.personalTasks.count > 0 {
                withAnimation(.easeOut(duration: 0.3)) {
                    showCards = true
                }
            }
        }

问题是 .onRecieve 什么时候执行?每次访问 feedData?或者每次更改 feedData 的任何属性时?当feedData 发生变化时,这个属性包装器如何知道?

4

1 回答 1

2

.onReceive每次feedData更改时都会执行,这是Published发布者发出值的时间。

如果Feed是一个值类型,比如 a struct,那么只要它的任何属性发生变化,Swift 的值类型语义就会确保整个对象都被改变。

如果Feed是引用类型 - a class,那么只有在设置feedData为不同的实例时才会发出一个值。

于 2020-10-09T14:02:06.777 回答