Какой новый метод жизненного цикла был добавлен в SwiftUI в последнем обновлении?

«Какой новый метод жизненного цикла был добавлен в SwiftUI в последнем обновлении?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В SwiftUI (начиная с iOS 17) добавлен новый модификатор onChange(of:initial:_:), который заменяет устаревший onChange(of:perform:).

Ключевые улучшения:

  1. Параметр initial: Позволяет выполнить код при первоначальной привязке значения, а не только при его изменении.
  2. Улучшенное замыкание: Принимает и старое (oldValue), и новое (newValue) значение, что устраняет необходимость хранения предыдущего состояния вручную.

Пример использования:

@State private var searchText = ""

TextField("Search...", text: $searchText)
    .onChange(of: searchText, initial: true) { oldValue, newValue in
        // Выполнится при первом рендере (initial: true) и при каждом изменении
        print("Поиск изменился с '(oldValue)' на '(newValue)'")
        performSearch(query: newValue)
    }

Почему это лучше? Старый onChange не предоставлял старого значения и не мог выполнить действие при инициализации, что часто требовало дополнительного кода в onAppear.