Ios 如何从不同的结构更改@State变量

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

我对swift UI和swift基本上是新手,我想知道如何从不同的结构更改变量。在这种情况下,我需要在另一个视图中从本节更改内容视图中的登录布尔值。请提供基本解释。谢谢

按钮(操作:{
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")
        })
    }
}