Выбор ответа Middle SwiftUI спрашивают часто обновлено

@Observable против ObservableObject

Вопрос

Чем макрос @Observable (iOS 17) лучше ObservableObject с @Published?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: View перерисовывается, только если в body читалось изменённое свойство. С ObservableObject любое изменение @Published отправляет objectWillChange, и перерисовываются все view, подписанные на объект, даже если они читают другое свойство. @Observable отслеживает доступ к свойствам при вычислении body и…

Варианты ответа

  1. @Observable работает и со структурами, а не только с классами
  2. View перерисовывается, только если в body читалось изменённое свойствоправильный ответ
  3. @Observable автоматически переносит все изменения на главный поток
  4. @Observable сохраняет состояние на диске между запусками приложения

Разбор

С ObservableObject любое изменение @Published отправляет objectWillChange, и перерисовываются все view, подписанные на объект, даже если они читают другое свойство. @Observable отслеживает доступ к свойствам при вычислении body и инвалидирует только тех, кто реально читал изменённое. Макрос применяется к классам. Главный поток он не гарантирует, это делает @MainActor. Хранения на диске нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.