SwiftUI预览界面Previews 如何修改@Binding变量的问题

news/2024/7/20 20:50:06 标签: swiftui, ios, swift

我们经常需要在Previews中调试,因为Previews速度快,但使用Previews时,需要注意一些与直接View的区别。

比较对于@Binding 变量在Previews中不能直接给$value传值,需要用Binding.constant(value)传入,但Binding.constant就导致value不能修改

如下:

struct testbindView: View {
    @Binding var selectedOption:String
    
    var body: some View {
        VStack {
            Text("selectedOption: \(selectedOption)")
            ChildView(selectedOption: $selectedOption)
        }
    }
}

struct ChildView: View {
    @Binding var selectedOption: String
    
    var body: some View {
        Button("Increment") {
            selectedOption = "OK"
        }
    }
}


struct MyDemoView: View{
    
    @State private var Option2 = ""

    @Binding var Option2:String


    var body: some View {
        testbindView($Option1) //点击按键,在界面中Increment后面显示OK
        testbindView($Option2) //点击按键,在界面中Increment后面显示还是原来内容test
    }
}

struct MyDemoView_Previews: PreviewProvider {
    static let myStr = "test"
    static var previews: some View {
        MyDemoView(Option2: Binding.constant(myStr))
    }
}

我开始以为是@Binging和@State有区别,导致Option2没有变化。

为什么使用Binding.constant

在 Previews 中创建视图时,无法直接访问属性包装器 @Binding。这是因为,在预览环境中,属性被视为常量,而不是绑定变量。

当您需要在预览中使用 @Binding 属性时,可以使用 Binding.constant(value) 创建一个常量绑定,它将属性包装在一个不可变的绑定变量中,并将值传递给它。这样,您就可以在预览中使用这个属性了。

例如:

struct MyView_Previews: PreviewProvider {
    static var previews: some View {
        let myBinding = Binding.constant("Hello, world!")
        return MyView(myProperty: myBinding)
    }
}

在这种情况下,myBinding 被包装在一个常量绑定中,并传递给 MyView 的 myProperty 属性。现在,您可以在预览中使用 myProperty 属性了。

那有什么方法解决这个问题呢?

方法一、

就是再新建一个TestMyDemoView就解决了

如:

struct testMyPlantDetailView: View {
    
    
     @State private var testOption2 = "test"
    
    var body: some View {
        MyDemoView(Option2: testOption2)
    }
}

struct MyDemoView_Previews: PreviewProvider {
     
    static var previews: some View {
        testMyPlantDetailView()
    }
}

现在点击Button("Increment") 后就都变为“OK"了

方法二

你可以包装在一个可变变量中,以便在预览中对其进行更改。例如,您可以使用 Binding 的 init(get: set:) 初始化程序来创建一个可变的绑定变量,

如下:
 

struct MyDemoView_Previews: PreviewProvider {
    @State static var myValue: String = "Hello, world!"
    static var myBinding: Binding<String> {
        Binding<String>(get: {
            myValue
        }, set: { newValue in
            myValue = newValue
        })
    }

    static var previews: some View {
        MyDemoView(Opetion2: myBinding)
            .onAppear {
                myValue = "New value"
            }
    }
}

在这种情况下,我们使用 @State 属性包装器来创建可变的 myValue 变量,并使用 Binding.init(get:set:) 初始化程序创建一个可变的绑定变量 myBinding,它使用可变的 myValue 变量来在预览中更改值。在预览中,您可以像上面那样对 myValue 进行更改,并且它将通过绑定变量传递到视图中。

以上是两种方法,如有不对,或你还有其他方法,请告诉我,谢谢!


http://www.niftyadmin.cn/n/340298.html

相关文章

作为一名普通的java程序员,我想和大家分享一下4年来的工作内容

一直有小伙伴想了解更多关于我的工作内容&#xff0c;所以今天我来分享一下我作为一名普通java程序员&#xff0c;4年来工作内容发生了哪些变化&#xff0c;以及我有什么感悟。 我是16届毕业生&#xff0c;我的第一份工作是做外包&#xff0c;第一年的时间里测试偏多&#xff…

好程序员:一篇文章看懂JavaScript 学习路线!前端自学!

如果你是一名编程初学者&#xff0c;刚刚学完HTML和CSS&#xff0c;那就不得不接触JavaScript。今天&#xff0c;好程序员给大家分享一篇2023最新版&#xff0c;JavaScript学习路线。 1. HTML and CSS 语法、结构、响应式设计、引导 2. JavaScript语言基础 语法、数据、类型、…

ApiKit 介绍及基本用法

1、ApiKit介绍及下载 ApiKitAPI 管理 Mock 自动化测试 异常监控 团队协作 结合 API 设计、文档管理、自动化测试、监控、研发管理和团队协作的一站式 API 生产平台&#xff0c;从个人开发者到跨国企业用户&#xff0c;Apikit 帮助全球超过50万开发者和10万家企业更快、更好…

图(课堂笔记)

图的引入与术语 两种图 1. 有向图&#xff08;Digraph&#xff09;&#xff1a;Each edge of arc has an associated direction. 2. 无向图&#xff08;non-directed graph&#xff09;&#xff1a;Every edge or arc is two-way. 简单图是一种特殊的无向图。无向图没有自环…

无效数据大揭秘——你不知道的那些坑!

进行数据管理时&#xff0c;无效数据可能会对生产力和决策质量造成严重的影响。如何发现和处理无效数据变得愈发重要。一起来唠唠各位大佬是如何处理的&#xff1f; ⭐ 什么是无效数据&#xff1f;⭐ 如何处理无效数据&#xff1f;⭐ 如何减少无效数据&#xff1f;⭐ 无效数据管…

Python CGI编程

CGI&#xff08;Common Gateway Interface&#xff09;是一种用于在Web服务器上执行脚本程序的标准接口。Python提供了CGI编程的支持&#xff0c;可以使用Python编写CGI脚本来处理Web请求和生成动态Web内容。 以下是使用Python进行CGI编程的基本步骤&#xff1a; 1. 创建一个…

文件上传,解析漏洞编译器安全(23)

apache低版本解析漏洞 这个网站目录里有两个文件&#xff0c;一个是正常的php文件&#xff0c;另一个xx.php.xxx&#xff0c;源码是php源码&#xff0c;命名的文件&#xff0c;而访问中xxx的文件依旧可以执行出php代码的结果&#xff0c;而xxx就能当php文件解析&#xff0c;这…

进程概念

目录 冯诺依曼体系结构 操作系统OS 系统调用和库函数概念 进程 task_struct内容分类 组织进程 初识fork 进程状态 Z(zombie)-僵尸进程 孤儿进程 进程优先级 环境变量 和环境变量相关的命令 环境变量的组织方式 程序地址空间 冯诺依曼体系结构 关于冯诺依曼&…