#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?
inVStack
? Если оно не существует, откуда оно берется?2.
Image?
это необязательное изображение, возможно, являющеесяnil
. В вашем коде он не существует до конца строкиimage = Image("Example.png")
. Поскольку эта строка вызывается не при инициализации структуры, а позже (atonAppear
), вы измените структуру, следовательно, вам нужно@State
🙂3. np. выберите его в качестве правильного ответа, если вы не возражаете;)