swift - SwiftUI 实时预览中的可变绑定
问题描述
我有一个带有变量的 ChildView:
@Binding var itemName: String
在这个 ChildView 中,我有几个按钮可以更改变量的值:
Button(action: {
self.itemName = "different value"
})
我试图像这样使用预览:
struct ChildView_Previews: PreviewProvider {
static var previews: some View {
ChildView(itemName: "test")
}
}
但我收到一个错误:
无法将“字符串”类型的值转换为预期的参数类型“绑定”
我知道我可以使用如下所示的预览。并且错误将消失并且预览将起作用,但是... itemName 将具有恒定值,它现在不会是可变的,在实时预览中不是交互式的:
struct ChildView_Previews: PreviewProvider {
static var previews: some View {
ChildView(itemName: .constant("test"))
}
}
如何在 SwiftUI Preview 中声明绑定以使其具有交互性?
解决方案
更新 a@State
中的变量PreviewProvider
似乎不会直接更新只读计算属性previews
。解决方案是将@State
变量包装在测试持有者视图中。然后在属性内使用此测试视图,previews
以便实时预览正确刷新。在 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()
}
}
推荐阅读
- java - 在收件人的电子邮件地址中没有收到邮件
- react-native - requireNativeComponent:在 UIManager 中找不到“RNLineChart”
- sql - 如何在 IN 子句中使用填充函数的结果?
- wordpress - register_rest_route 被错误调用
- search - 搜索具有特定答案的非特定术语
- python - 如何判断我的 Python 项目没有使用哪些已安装的包?
- swagger - 是否允许 OpenAPI 3.0 YAML 规范复杂路径?
- spring-boot - Spring Batch Conditional Flow - 第二个流总是进入状态 FAILED
- file-upload - 在 Flutter 中通过多部分 post 获取数据上传到服务器的进度
- java - 如何避免selenium webdriver java中的空指针异常