Почему @State var используется, когда представление не обновляется

#swift #swiftui

#swift #swiftui

Вопрос:

Мое понимание @State переменной заключается в том, что всякий раз, когда состояние изменяется внутри a View , нам нужно использовать @State variable . Однако рассмотрим пример ниже:

 struct ContentView: View {
    @State private var image: Image?

    var body: some View {
        VStack {
            image?
                .resizable()
                .scaledToFit()
        }
        .onAppear(perform: loadImage)
    }

    func loadImage() {
        image = Image("Example.png")
    }
}
  

Насколько я знаю, я ничего не меняю View с помощью тумблера или кнопки и т. Д. Тогда почему @State используется переменная? Почему мы не можем просто написать: private var image: Image?

Ответ №1:

VStack будет содержать EmptyView() , если изображение равно нулю. В этом смысле ваше представление изменяется.

Подумайте об этом: до loadImage тех пор, пока не будет вызвано, изображение равно нулю, а представление уже инициализировано!

Комментарии:

1. Приношу свои извинения за то, что спрашиваю основы, я просто не могу применить свои знания в этом контексте, я не сталкивался с дополнительными представлениями, так что это меня смущает. а) Когда мы говорим @State private var image: Image? , что именно это означает с точки View зрения SwiftUI? б) Что означает image? in VStack ? Если оно не существует, откуда оно берется?

2. Image? это необязательное изображение, возможно, являющееся nil . В вашем коде он не существует до конца строки image = Image("Example.png") . Поскольку эта строка вызывается не при инициализации структуры, а позже (at onAppear ), вы измените структуру, следовательно, вам нужно @State 🙂

3. np. выберите его в качестве правильного ответа, если вы не возражаете;)