Middle+
78
questionbank

Как сделать класс наблюдаемым начиная с iOS 17?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech
swift

До iOS 17 использовались:

  1. ObservableObject протокол с @Published для свойств.
  2. KVO (Key-Value Observing) для более низкоуровневого наблюдения.

С iOS 17 @Observable вводит более простой и эффективный механизм, основанный на макросах компилятора. При изменении любого наблюдаемого свойства объекта, помеченного @Observable, SwiftUI или другие части фреймворка, которые подписаны на изменения, автоматически обновляют свой UI. Это происходит без необходимости явно указывать @Published или использовать KVO.

Синтаксис:

swift

Использование в SwiftUI (по аналогии с @StateObject или @ObservedObject):

swift

Основные преимущества @Observable по сравнению с @ObservedObject / @Published:

  • Простота: Не нужно помечать каждое свойство с @Published.
  • Эффективность: Обновления происходят только при изменении наблюдаемых свойств, а не всего объекта.
  • Меньше шаблонного кода: Нет необходимости в objectWillChange.send().
  • Макрос: Работает на уровне компилятора, обеспечивая лучшие оптимизации.
  • @ObservationIgnored: Позволяет явно исключить свойства из наблюдения.

Это основной способ создания наблюдаемых объектов в iOS 17 и более новых версиях, рекомендованный Apple.