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

问题描述

我有出版商

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

解决方法

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

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

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