繁体   English   中英

Swift:结构实例不更新视图

[英]Swift: Struct instances not updating view

以下代码经过简化和隔离。 它的目的是有一个Text()视图,它显示按钮被单击的次数,以及一个Button()来增加文本视图。

问题:单击按钮实际上并没有改变 Text() 视图,它继续显示“1”

struct Temp: View {
    
    @State var h = struct1()

    var body: some View {
        VStack {
            Button(action: {
                h.num += 1
            }, label: {
                Text("CLICK ME")                
            })
            Text(String(h.num))
        }
    }
}

struct struct1 {
    @State var num = 1
}

有趣的是,相同的代码在 swift 操场上工作(显然Text()更改为print() )。 所以,我想知道这是否是 XCode 特定的错误? 如果不是,为什么会这样?

@State中的变量中删除struct1

SwiftUI 包装器仅适用于 SwiftUI View ,但ObservableObject中的@Published除外。

我没有在任何文档中明确找到这一点,但是包装器符合DynamicProperty并且您查看文档中它说

视图在重新计算视图主体之前为这些属性赋值。

因此,暗示如果包装的变量不在一个也是 SwiftUI Viewstruct中,它将不会获得更新的值,因为它没有body

https://developer.apple.com/documentation/swiftui/dynamicproperty

错误在于它可以在 Playgrounds 中使用,但 Playground 似乎有一些这样的东西。 可能是因为它遵守和运行的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM