SwiftUI-ObservableObject、EnvironmentObject、SummaryView

SwiftUI-ObservableObject、EnvironmentObject、SummaryView,view,swiftui,summary,observableobject,environmentobject,View,Swiftui,Summary,Observableobject,Environmentobject,创建代码后,我想创建一个摘要视图,允许我查看在选择器中选择的值。 我该怎么办?我读了一些关于@observeObject和@EnvironmentObject的论坛,但我不明白。。。 非常感谢:) 您可以将您的@State属性移动到可观察对象: class ViewModel: ObservableObject { @Published var firstAnimal = Animal.allCases[0] @Published var secondAnimal = Anima

创建代码后,我想创建一个摘要视图,允许我查看在选择器中选择的值。 我该怎么办?我读了一些关于@observeObject和@EnvironmentObject的论坛,但我不明白。。。 非常感谢:)


您可以将您的
@State
属性移动到
可观察对象

class ViewModel: ObservableObject {
    @Published var firstAnimal = Animal.allCases[0]
    @Published var secondAnimal = Animal.allCases[0]
}
struct ContentView: View {
    @EnvironmentObject var viewModel: ViewModel
    
    var body: some View {
        ...
        Picker(selection: $viewModel.firstAnimal, label: Text("Select first animal")) {
            ForEach(Animal.allCases, id: \.self) { element in
                Text(element.rawValue.capitalized)
            }
        }
    }
}
并从
@EnvironmentObject
访问它们:

class ViewModel: ObservableObject {
    @Published var firstAnimal = Animal.allCases[0]
    @Published var secondAnimal = Animal.allCases[0]
}
struct ContentView: View {
    @EnvironmentObject var viewModel: ViewModel
    
    var body: some View {
        ...
        Picker(selection: $viewModel.firstAnimal, label: Text("Select first animal")) {
            ForEach(Animal.allCases, id: \.self) { element in
                Text(element.rawValue.capitalized)
            }
        }
    }
}
记住将
ViewModel
插入到根视图:

ContentView().environmentObject(ViewModel())

您可以将您的
@State
属性移动到
可观察对象

class ViewModel: ObservableObject {
    @Published var firstAnimal = Animal.allCases[0]
    @Published var secondAnimal = Animal.allCases[0]
}
struct ContentView: View {
    @EnvironmentObject var viewModel: ViewModel
    
    var body: some View {
        ...
        Picker(selection: $viewModel.firstAnimal, label: Text("Select first animal")) {
            ForEach(Animal.allCases, id: \.self) { element in
                Text(element.rawValue.capitalized)
            }
        }
    }
}
并从
@EnvironmentObject
访问它们:

class ViewModel: ObservableObject {
    @Published var firstAnimal = Animal.allCases[0]
    @Published var secondAnimal = Animal.allCases[0]
}
struct ContentView: View {
    @EnvironmentObject var viewModel: ViewModel
    
    var body: some View {
        ...
        Picker(selection: $viewModel.firstAnimal, label: Text("Select first animal")) {
            ForEach(Animal.allCases, id: \.self) { element in
                Text(element.rawValue.capitalized)
            }
        }
    }
}
记住将
ViewModel
插入到根视图:

ContentView().environmentObject(ViewModel())