@Published发布值时,它会包装吗?

时间:2020-10-09 11:04:33

标签: swift swiftui publish-subscribe combine property-wrapper

我有出版商

@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中的某事何时更改?

1 个答案:

答案 0 :(得分:2)

.onReceive将在每次feedData更改时执行,此时Published发布者将发出一个值。

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

如果Feed是引用类型-class,则只有将feedData设置为其他实例时,才会发出值。