[英]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 View
的struct
中,它将不会获得更新的值,因为它没有body
。
https://developer.apple.com/documentation/swiftui/dynamicproperty
错误在于它可以在 Playgrounds 中使用,但 Playground 似乎有一些这样的东西。 可能是因为它遵守和运行的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.