New We are sorting MAX channels into categories and territories. Read the news
Loading image…

Почему @ObservedObject сбрасывает модель в SwiftUI



@ObservedObject следит за изменениями модели, полученной извне, но не хранит созданный внутри представления экземпляр. Когда состояние родителя меняется, SwiftUI может заново создать значение дочернего View. Вместе с ним появится новый CounterViewModel, а счётчик вернётся к нулю.

Если дочернее представление само создаёт модель, объявляйте её через @StateObject. SwiftUI сохранит экземпляр, пока считает представление тем же самым. Если модель создаёт родитель, он хранит её через @StateObject и передаёт ребёнку как @ObservedObject.

Для нового кода под iOS 17 и новее источник предлагает @Observable с @State, но правило владения остаётся тем же. Пример со сбрасывающимся счётчиком и варианты исправления приведены с кодом.
Views: 19
Open in MAX Report an inaccuracy

Report an inaccuracy

Describe what needs fixing. If you have a source, add a link.

You are leaving datool.ru

The link leads to an external website. datool.ru is not responsible for its content — check the address before entering passwords or payment details.

Redirecting in 10 s

Go