我試圖在兄弟視圖之間傳遞一些數據。
我有一個帶按鈕的VerseDetailView
:
@StateObject var favoritesViewModel = FavoritesViewModel()
...
Button("Add to favorite") {
favoritesViewModel.add(verse: verse)
}
我的FavoritesViewModel
看起來像這樣:
class FavoritesViewModel: ObservableObject {
@Published var favoriteVerses: [Verse] = []
func add(verse: Verse) {
favoriteVerses.append(verse)
}
}
如何傳遞favoriteVerses
以在完全不同的子視圖中顯示?
我的主應用程序文件如下所示:
var body: some Scene {
WindowGroup {
TabView {
NavigationView {
BookView() // VerseDetailView is a child of this view
}
.tabItem {
Image(systemName: "book")
Text("Books")
}
NavigationView {
FavoritesView() // I want to get the array of favoriteVerses here
}
.tabItem {
Image(systemName: "bookmark")
Text("Favorites")
}
}
}
}
我的FavoritesView
看起來像這樣:
struct FavoritesView: View {
@EnvironmentObject var favoritesViewModel: FavoritesViewModel
// is this correct?
// I get a hread 1: "Fatal error: No ObservableObject of type FavoritesViewModel found" error
var body: some View {
List {
Section(header: Text("Favorite verses")) {
ForEach(favoritesViewModel.favoriteVerses) { verse in
Text(verse.verse)
}
}
}
}
}
我嘗試將此添加到主應用程序文件的頂部:
var favoritesViewModel = FavoritesViewModel()
...
NavigationView {
FavoritesView().environmentObject(favoritesViewModel)
}
但這也不起作用
為公共俯視圖添加它(在您的例子中是
TabView
),如