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

Что такое @Binding

Вопрос

Дочерняя view Toggle-переключателя должна менять флаг, который хранит родитель. Что использовать в ребёнке?

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

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

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

Коротко

Правильный ответ: @Binding var isOn: Bool, а родитель передаёт $isOn. @Binding это двусторонняя ссылка на чужое состояние: чтение и запись идут в источник правды родителя.

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

  1. @State var isOn: Bool, инициализированный значением родителя
  2. let isOn: Bool и замыкание onChange, которое родитель обновит
  3. @Environment(\.isOn), который родитель задаёт модификатором
  4. @Binding var isOn: Bool, а родитель передаёт $isOnправильный ответ

Разбор

@Binding это двусторонняя ссылка на чужое состояние: чтение и запись идут в источник правды родителя. Префикс $ у @State даёт Binding. Если сделать в ребёнке свой @State, он скопирует начальное значение и дальше будет жить отдельно, родитель изменений не увидит. Пользовательского ключа окружения isOn нет.

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

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