Swift:如何在结构范围之外修改结构 属性
Swift: How to modify struct property outside of the struct's scope
在 Swift/SwiftUI 中编程,并在尝试启用视图以修改不同结构的属性时遇到此问题。
有没有办法在不为结构创建对象的情况下修改属于结构的 属性?如果有,那是什么?
现在,您正在尝试访问 showOverlap
,就好像它是 MainView
上的 static
变量一样——这不会起作用,因为它不是静态 属性,即使是,您也需要引用您所展示的 MainView
的特定实例——这在 SwiftUI 中我们通常会避免,因为 View
是可传递的。
相反,您可以传递一个 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/SwiftUI 中编程,并在尝试启用视图以修改不同结构的属性时遇到此问题。
有没有办法在不为结构创建对象的情况下修改属于结构的 属性?如果有,那是什么?
现在,您正在尝试访问 showOverlap
,就好像它是 MainView
上的 static
变量一样——这不会起作用,因为它不是静态 属性,即使是,您也需要引用您所展示的 MainView
的特定实例——这在 SwiftUI 中我们通常会避免,因为 View
是可传递的。
相反,您可以传递一个 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")
})
}
}
}