检测UI对@Published属性的更改

时间:2020-05-01 15:04:57

标签: swiftui

我有一个简单的SwiftUI应用,该应用使用REST API调用获取应用设置,并使用具有@ObservedObject属性的@Published将其提供给UI。我有几个绑定到Toggle属性的@Published视图。

每次Toggle被“切换”时,我需要将更改上传到服务器。因此,我在didSet属性中添加了@Published观察者,尽管这种方法有效,但是当我最初从服务器获取设置时,didSet属性观察者也会被触发。

最初使用从服务器获取的设置设置didSet属性时,如何避免触发@Published观察者?

2 个答案:

答案 0 :(得分:0)

没有显示代码很难,但是当发布值为“ nil”(初始)时,您可以在didSet中添加一个if条件,阻止它执行上载。

答案 1 :(得分:0)

您描述的行为是正确的。当您使用REST API加载设置并将其设置为@Published时,将设置该值,并且将调用您的函数。

您可以将变量添加到您的类中,该变量将在获取完成时进行存储。当您获取所有结果时,将其设置为true,然后才允许执行didSet函数。

//Set your fetched data previous 
var fetchCompleted : Bool = false

//after your api call and fetch result success
fetchCompleted = true

.didSet() 
{
   if (fetchCompleted)
   {
   //allow override from variables and store new setting
   }
}

确保首先使用获取的数据设置变量,然后将fetchCompleted设置为true。否则,didSet将在after之后调用,并且fetchCompleted已经为true。