[英]Passing different instances of same Model to same SwiftUI View struct
我有一個基於 Tab 的應用程序,在 Swift 中實現,並使用 SwiftUI。
對於其中的 2 個選項卡,我想顯示基於相同 SwiftUI 結構的列表,顯示同一類的不同實例。
在場景委托中,
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?
提前致謝。
我建議您簡單地為模型創建兩個子類:
class NaughtyList: SantaListModel {
init() {
super.init(title: "Naughty")
}
}
class NiceList: SantaListModel {
init() {
super.init(title: "Nice")
}
}
通過這樣做,兩個列表都可以存儲在環境中而不會發生沖突。 SwiftUI 唯一需要區分環境對象的是類。 因此,擁有單獨的類很重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.