gpt4 book ai didi

swift - SwiftUI 实时预览中的可变绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 09:17:41 25 4
gpt4 key购买 nike

我有一个带有变量的 ChildView:

@Binding var itemName: String

在这个 ChildView 中,我有几个按钮可以更改变量的值:
Button(action: {
self.itemName = "different value"
})

我试图像这样使用预览:
struct ChildView_Previews: PreviewProvider {
static var previews: some View {
ChildView(itemName: "test")
}
}

但我收到一个错误:

Cannot convert value of type 'String' to expected argument type 'Binding'



我知道我可以使用如下所示的预览。并且错误将消失并且预览将起作用,但是... itemName 将具有恒定值,它现在不会是可变的,在实时预览中不是交互式的:
struct ChildView_Previews: PreviewProvider {
static var previews: some View {
ChildView(itemName: .constant("test"))
}
}

如何在 SwiftUI Preview 中声明绑定(bind)以使其具有交互性?

最佳答案

更新到 @State PreviewProvider 中的变量似乎没有更新只读计算属性 previews直接地。解决方案是包装 @State测试持有人 View 中的变量。然后在 previews 中使用这个测试 View 属性,以便实时预览正确刷新。在 Xcode 11.2.1 中测试和工作。

struct ChildView: View {
@Binding var itemName: String

var body: some View {
VStack {
Text("Name: \(itemName)")
Button(action: {
self.itemName = "different value"
}) {
Text("Change")
}
}
}
}

struct ChildView_Previews: PreviewProvider {

struct BindingTestHolder: View {
@State var testItem: String = "Initial"
var body: some View {
ChildView(itemName: $testItem)
}
}

static var previews: some View {
BindingTestHolder()
}
}
backup

关于swift - SwiftUI 实时预览中的可变绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59246859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com