【发布时间】:2020-04-09 03:09:14
【问题描述】:
我有一个基于 Tab 的应用,用 Swift 实现,并使用 SwiftUI。
对于 2 个选项卡,我想显示基于相同 SwiftUI 结构的列表,显示同一类的不同实例。
在 SceneDelegate 中,
let naughtyModel = SantaListModel(title: "Naughty")
let niceModel = SantaListModel(title: "Nice")
// Create the SwiftUI view that provides the window contents.
let contentView = ContentView()
.environmentObject(naughtyModel)
.environmentObject(niceModel)
...
那么,
struct ContentView: View {
@State private var selection = 0
@EnvironmentObject var naughtyModel: SantaList
@EnvironmentObject var niceModel: SantaList
var body: some View {
TabView(selection: $selection){
SantaListView().environmentObject(naughtyModel)
.font(.title)
.tabItem {
VStack {
Text(naughtyModel.title)
}
}
.tag(0)
SantaListView().environmentObject(niceModel)
.font(.title)
.tabItem {
VStack {
Text(niceModel.title)
}
}
.tag(1)
}
}
}
到目前为止一切似乎都很好,但是当我实现 SantaListView,一个显示不同实例的共享结构实现时,计划出错了......
struct SantaListView: View {
@EnvironmentObject var santaListModel: SantaList // <<< the problem: naughty or nice?
var body: some View {
NavigationView() {
VStack {
}
.navigationBarTitle(Text(santaListModel.title))
}
}
}
在SantaList类实现中,如何引用具体的@EnvironmentVariable,使得上面的santaListModel是指具体的实例naughtyModel或者niceModel?
提前致谢。
【问题讨论】:
-
不是很清楚为什么......但这是不同的问题。 如何 modelA 与modelB 不同?如果您需要在
MyModelView中有条件地做某事,则将该条件放入构造函数参数中。 -
它们是同一个模型的两个实例,持有不同的数据列表,比如说圣诞老人的淘气列表和圣诞老人的好列表;-)