Обнаружение изменений пользовательского интерфейса в свойстве @Published - PullRequest
0 голосов
/ 01 мая 2020

У меня есть простое приложение SwiftUI, которое выбирает параметры приложения с помощью вызова REST API и делает его доступным для пользовательского интерфейса, используя @ObservedObject со свойством @Published. У меня есть несколько Toggle представлений, которые привязываются к свойству @Published.

Каждый раз, когда Toggle переключается, мне нужно загрузить изменения на сервер. Поэтому я добавил наблюдателя didSet в свойство @Published, и, хотя это работает, наблюдатель свойства didSet также запускается, когда я первоначально получаю настройки с сервера.

Как можно избежать срабатывания didSet Наблюдатель при первоначальной установке свойства @Published с настройками, выбранными с сервера?

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Поведение, которое вы описываете, корректно. Когда вы загружаете настройку с помощью 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 будет вызываться после и fetchCompleted уже будет иметь значение true.

0 голосов
/ 01 мая 2020

Сложно без показанного кода, но вы можете добавить условие if в вашем didSet, которое не позволяет ему выполнять загрузку, когда значение публикации равно "nil" (начальное значение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...