Ios 如何从不同的结构更改@State变量
我对swift UI和swift基本上是新手,我想知道如何从不同的结构更改变量。在这种情况下,我需要在另一个视图中从本节更改内容视图中的登录布尔值。请提供基本解释。谢谢Ios 如何从不同的结构更改@State变量,ios,swift,xcode,swiftui,Ios,Swift,Xcode,Swiftui,我对swift UI和swift基本上是新手,我想知道如何从不同的结构更改变量。在这种情况下,我需要在另一个视图中从本节更改内容视图中的登录布尔值。请提供基本解释。谢谢 按钮(操作:{ if(checkKey(testKey:self.key)){ //这里 } }) { 文本(“提交”) .padding() .background(Color.init(.sRGB,红色:0.01,绿色:0.01,蓝色:0.01,不透明度:0.05)) .转弯半径(10) } 这是内容视图。我需要更改@St
按钮(操作:{
if(checkKey(testKey:self.key)){
//这里
}
}) {
文本(“提交”)
.padding()
.background(Color.init(.sRGB,红色:0.01,绿色:0.01,蓝色:0.01,不透明度:0.05))
.转弯半径(10)
}
这是内容视图。我需要更改@State bool
struct ContentView: View {
@State public var loggedin: Bool = false
var body: some View {
NavigationView {
if (loggedin) {
MainView()
} else {
// Not Logged In
LoginScreen()
}
}
}
}
在登录屏幕视图中。如果你只在这里使用登录名,就可以这样,如果你在整个应用程序中使用它,你可能需要查看@EnvironmentObject
在登录屏幕视图中。如果您只在此处使用登录名,那么就可以这样,如果您在整个应用程序中使用它,您可能需要查看@EnvironmentObject。以下是完整的代码,您可以使用
@State public var loggedin:Bool
和chnage value将您的@State public var loggedin:Bool
变量传递给另一个结构
struct ContentView: View {
@State public var loggedin: Bool = false
var body: some View {
NavigationView {
if (loggedin) {
MainView(loggedin: $loggedin)
} else {
// Not Logged In
LoginScreen(loggedin: $loggedin)
}
}
}
}
}这是一个完整的代码,您可以使用
@Binding var loggedin:Bool
和chnage值将@State public var loggedin:Bool
变量传递给另一个结构
struct ContentView: View {
@State public var loggedin: Bool = false
var body: some View {
NavigationView {
if (loggedin) {
MainView(loggedin: $loggedin)
} else {
// Not Logged In
LoginScreen(loggedin: $loggedin)
}
}
}
}
}您无法更改其他视图的状态布尔值。您应该为您的数据模型创建一个可观察对象,然后在两个视图之间共享一个实例。您不能像这样更改另一个视图的状态布尔。您应该为数据模型创建一个可观察对象,然后在两个视图之间共享一个实例。我不知道代码到底做了什么,但是我应该在预览提供程序的参数中添加什么。调用LoginScreen()时需要一个参数“LoginScreen(loggedin:Binding)”您可以像这样传递LoginScreen(loggedin:.constant(false)),这应该可以工作,但我在代码中遇到了一个错误。我不知道代码到底做了什么,但是我应该在预览提供程序的参数中添加什么。调用LoginScreen()时需要一个参数“LoginScreen(loggedin:Binding)”您可以像这样传递LoginScreen(loggedin:.constant(false))
struct MainView: View {
@Binding var loggedin: Bool
var body: some View {
VStack {
Text("")
Button(action: {
self.loggedin = false
}, label: {
Text("Chnage loggedin value")
})
}
}