Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为什么在视图不为';不要更新_Swift_Swiftui - Fatal编程技术网

Swift 为什么在视图不为';不要更新

Swift 为什么在视图不为';不要更新,swift,swiftui,Swift,Swiftui,我对@State变量的理解是,只要视图中的状态发生变化,我们就需要使用@State变量。但是,请考虑下面的例子: struct ContentView: View { @State private var image: Image? var body: some View { VStack { image? .resizable() .scaledToFit()

我对
@State
变量的理解是,只要
视图中的状态发生变化,我们就需要使用
@State
变量。但是,请考虑下面的例子:

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")
    }
}

就我有限的知识而言,我不会凭借切换开关或按钮等更改任何
视图
。那么为什么要使用
@State
变量呢?为什么我们不能直接写:
private-var-image:image?

VStack将包含一个
EmptyView()
,如果映像为nil。从这个意义上说,你的观点改变了


想想看:在调用
loadImage
之前,图像为零,视图已经初始化

我很抱歉问了一些基本的问题,我只是无法将我的知识应用到这个环境中,我没有遇到可选的观点,所以这让我很困惑。a) 当我们说
@State private var image:image?
,从SwiftUI
视图
的角度来看,这到底意味着什么?b)
VStack
中的
image?
是什么意思?如果它不存在,它从哪里来?
Image?
是可选的图像,可能是
nil
。在您的代码中,它在
image=image(“Example.png”)
行之前不存在。由于该行不是在结构初始化时调用的,而是稍后(在
onAppear
),您将更改结构,因此需要
@State
:)np。如果您不介意,请选择它作为正确答案;)