Swift:如何在结构范围之外修改结构属性

Posted

技术标签:

【中文标题】Swift:如何在结构范围之外修改结构属性【英文标题】:Swift: How to modify struct property outside of the struct's scope 【发布时间】:2022-01-15 15:02:08 【问题描述】:

在 Swift/SwiftUI 中编程,并在尝试启用视图以修改不同结构的属性时遇到此问题。

有没有办法修改属于结构的属性,而无需为结构创建对象?如果有,是什么?

【问题讨论】:

【参考方案1】:

现在,您正在尝试访问 showOverlap,就好像它是 MainView 上的 static 变量一样——这不起作用,因为它不是静态属性,即使是,您也会需要引用您所展示的 MainView 的特定实例——在 SwiftUI 中我们通常会避免这种情况,因为 Views 是可传递的。

相反,您可以传递Binding——这是在 SwiftUI 中将父视图状态传递给子视图的方法之一。


struct MainView: View 
    @State var showOverlap = false
    
    var body: some View 
        ZStack 
            Button(action: 
                showOverlap = true
            ) 
                Text("Button")
            
            if showOverlap 
                Overlap(showOverlap: $showOverlap) //<-- Here
            
        
    



struct Overlap: View 
    @Binding var showOverlap : Bool  //<-- Here
    
    var body: some View 
        ZStack 
            RoundedRectangle(cornerRadius: 40)
                .aspectRatio(130/200, contentMode: .fit)
                .foregroundColor(.gray)
            
                Button(action: 
                   showOverlap = false //<-- Here
                , label: 
                    Text("Back")
                )
        
    

【讨论】:

以上是关于Swift:如何在结构范围之外修改结构属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将计算的闭包属性转换为闭包?

如何在 Swift 中更改结构属性

如何在 Swift 中的变异结构上正确地创建惰性派生属性?

如何在 Swift 中正确获取 Do-Catch 范围之外的值(使用 Try)

Swift之深入解析SwiftUI属性包装器如何处理结构体

如何在swift中使用其他属性将实例作为属性传递