Ios 在swiftUi中跨视图更改结构内的数据
我想在多个视图之间共享数据,但更改只影响本地,我希望是全局的,swift或特定的SwiftUI是否有方法全局更改数据?? (注:无约束力) 我的主要观点Ios 在swiftUi中跨视图更改结构内的数据,ios,swift,swiftui,Ios,Swift,Swiftui,我想在多个视图之间共享数据,但更改只影响本地,我希望是全局的,swift或特定的SwiftUI是否有方法全局更改数据?? (注:无约束力) 我的主要观点 struct UIController: View { @ObservedObject var userAuth = AuthUser() // I want to affect this value, isLogin @State var showLogin:Bool = true var body: some Vie
struct UIController: View {
@ObservedObject var userAuth = AuthUser() // I want to affect this value, isLogin
@State var showLogin:Bool = true
var body: some View {
ZStack {
homeLogin()
.fullScreenCover(isPresented: $userAuth.isLogin, content: AfterLogin.init)
Text("\(String(self.userAuth.isLogin))")
}
}
}
更改值的视图:
struct LoginForm: View {
@StateObject var userAuth = AuthUser()
@State var username:String = ""
@State var passwd:String = ""
@State var isShowPasswd:Bool = false
var body: some View {
Button(action: {
self.userAuth.isLogin = true
}) {
RoundedRectangle(cornerRadius: 10)
.frame(width: UIScreen.screenWidth-100, height: 50, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
.foregroundColor(.purple)
.overlay(
Text("Log In")
.fontWeight(.semibold)
.foregroundColor(.white)
.font(Font.system(size: 20, design: .rounded)))
}
}
}
要启用将导致您的SwiftUI视图更新的数据共享/设置,您可以实施以下策略:
observegeobject
保存数据,或b)使您的AuthUser
符合observegeobject
协议。使用@Published
属性包装器对您希望可用于SwiftUI视图的数据进行包装:SceneDelegate
中,在ContentView
上设置.environmentObject
视图修饰符,传递对AuthUser
的引用:@EnvironmentObject
属性包装器使数据可用:swiftUIauth.someProperty
。如果值更改,您的SwiftUI视图将更新class AuthUser: ObservableObject {
@Published var someProperty: Bool = false
}
static let authUser = AuthUser()
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let contentView = ContentView()
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: contentView.environmentObject(SceneDelegate.authUser))
self.window = window
window.makeKeyAndVisible()
}
}
struct LoginForm: View {
@EnvironmentObject var swiftUIauth: AuthUser
var body: some View {
...