struct ExampleView: View {

Не меняя FormView, сбросьте его identity через .id: SwiftUI создаст новое состояние формы с пустыми строками.

Короткий ответ

Что ответить на собеседовании

Не меняя FormView, сбросьте его identity через .id: SwiftUI создаст новое состояние формы с пустыми строками.

Подробный разбор

Ответ с пояснениями

Условие

struct ExampleView: View { var body: some View { VStack { FormView() Button("Reset") { // TODO: } } } }

// ТОЛЬКО ДЛЯ ЧТЕНИЯ struct FormView: View { @State private var firstname = "" @State private var lastname = "" @State private var email = "" @State private var website = ""

var body: some View {
    Form {
        TextField("Введите имя", text: self.$firstname)
        TextField("Введите фамилию", text: self.$lastname)
        TextField("Введите адрес электронной почты", text: self.$email)
        TextField("Введите адрес сайта", text: self.$website)
    }
}

}

Ответ

Не меняя FormView, сбросьте его identity через .id: SwiftUI создаст новое состояние формы с пустыми строками.

Добавьте идентификатор в родительский экран и меняйте его только по нажатию:

struct ExampleView: View {
    @State private var formID = UUID()

    var body: some View {
        VStack {
            FormView().id(formID)
            Button("Reset") { formID = UUID() }
        }
    }
}

Это сбрасывает все локальные @State дочерней формы, а не обращается к её private-полям. Одновременно теряются и другие состояния поддерева, например фокус. Если допустимо менять FormView, более управляемый вариант — вынести данные формы в модель и передавать bindings.

Источник: developer.apple.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее