我有一个简单的SwiftUI应用,该应用使用REST API调用获取应用设置,并使用具有@ObservedObject
属性的@Published
将其提供给UI。我有几个绑定到Toggle
属性的@Published
视图。
每次Toggle
被“切换”时,我需要将更改上传到服务器。因此,我在didSet
属性中添加了@Published
观察者,尽管这种方法有效,但是当我最初从服务器获取设置时,didSet
属性观察者也会被触发。
最初使用从服务器获取的设置设置didSet
属性时,如何避免触发@Published
观察者?
答案 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。