Swiftui 如何在选项卡视图中使用公共变量?

Swiftui 如何在选项卡视图中使用公共变量?,swiftui,Swiftui,我目前正在使用SwiftUI开发一个应用程序 此应用程序有3个结构 ①内容视图 ②第一视图 ③第二视图 这三个结构在选项卡视图中进行页面转换 这个应用程序有一个常见的变量类型Bool,使用observeObjectAnnotation 我想在FirstView和SecondView中更改为显示和消失文本视图,这取决于变量的条件,但FirstView没有像我预期的那样更改视图 我怎样才能解决这个问题 代码如下: ContentView.swift import SwiftUI struc

我目前正在使用SwiftUI开发一个应用程序

此应用程序有3个结构

  • ①内容视图
  • ②第一视图
  • ③第二视图
这三个结构在选项卡视图中进行页面转换

这个应用程序有一个常见的变量类型Bool,使用observeObjectAnnotation


我想在FirstView和SecondView中更改为显示和消失文本视图,这取决于变量的条件,但FirstView没有像我预期的那样更改视图

我怎样才能解决这个问题


代码如下:

ContentView.swift

import SwiftUI

struct ContentView: View {
    var body: some View {
        TabView {
            FirstView()
                .tabItem {
                    Text("First")
            }.tag(1)

            SecondView()
                .tabItem {
                    Text("Second")
            }.tag(2)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
import SwiftUI

struct FirstView: View {

    @ObservedObject var firstCheck: ViewModel = ViewModel() 

    var body: some View {
        VStack{
            if firstCheck.check == true{
                    Text("checked")
            }
        }
    }
}

struct FirstView_Previews: PreviewProvider {
    static var previews: some View {
        FirstView()
    }
}
import SwiftUI

struct SecondView: View {

    @ObservedObject var secondCheck = ViewModel()


    var body: some View {
        VStack{
            Toggle(
                isOn: $secondCheck.check
            ){
                Text("change")
            }
            if self.secondCheck.check == true{
                Text("checked")
            }
        }
    }
}

struct SecondView_Previews: PreviewProvider {
    static var previews: some View {
        SecondView()
    }
}
斯威夫特

import SwiftUI

struct ContentView: View {
    var body: some View {
        TabView {
            FirstView()
                .tabItem {
                    Text("First")
            }.tag(1)

            SecondView()
                .tabItem {
                    Text("Second")
            }.tag(2)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
import SwiftUI

struct FirstView: View {

    @ObservedObject var firstCheck: ViewModel = ViewModel() 

    var body: some View {
        VStack{
            if firstCheck.check == true{
                    Text("checked")
            }
        }
    }
}

struct FirstView_Previews: PreviewProvider {
    static var previews: some View {
        FirstView()
    }
}
import SwiftUI

struct SecondView: View {

    @ObservedObject var secondCheck = ViewModel()


    var body: some View {
        VStack{
            Toggle(
                isOn: $secondCheck.check
            ){
                Text("change")
            }
            if self.secondCheck.check == true{
                Text("checked")
            }
        }
    }
}

struct SecondView_Previews: PreviewProvider {
    static var previews: some View {
        SecondView()
    }
}
斯威夫特酒店

import SwiftUI

struct ContentView: View {
    var body: some View {
        TabView {
            FirstView()
                .tabItem {
                    Text("First")
            }.tag(1)

            SecondView()
                .tabItem {
                    Text("Second")
            }.tag(2)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
import SwiftUI

struct FirstView: View {

    @ObservedObject var firstCheck: ViewModel = ViewModel() 

    var body: some View {
        VStack{
            if firstCheck.check == true{
                    Text("checked")
            }
        }
    }
}

struct FirstView_Previews: PreviewProvider {
    static var previews: some View {
        FirstView()
    }
}
import SwiftUI

struct SecondView: View {

    @ObservedObject var secondCheck = ViewModel()


    var body: some View {
        VStack{
            Toggle(
                isOn: $secondCheck.check
            ){
                Text("change")
            }
            if self.secondCheck.check == true{
                Text("checked")
            }
        }
    }
}

struct SecondView_Previews: PreviewProvider {
    static var previews: some View {
        SecondView()
    }
}
ViewModel.swift

import Foundation

final class ViewModel: ObservableObject {
    @Published var check: Bool = false
}


Xcode:Version11.7

将对象保留在一个位置,可以是父视图

struct ContentView: View {
    @ObservedObject var viewModel = ViewModel()
//    @StateObject var viewModel = ViewModel()     // SwiftUI 2.0


    var body: some View {
        TabView {
           // .. other code here
        }
        .environmentObject(viewModel)   // << inject here
    }
}

谢谢你的帮助,现在代码运行得和我预期的一样好!