如何在 SwiftUI 中将内容添加到收藏列表?

Posted

技术标签:

【中文标题】如何在 SwiftUI 中将内容添加到收藏列表?【英文标题】:How to add something to a favorite list in SwiftUI? 【发布时间】:2020-05-08 18:21:37 【问题描述】:

我正在尝试创建一个收藏夹列表,我可以在其中添加不同的项目,但它不起作用。我做了一个简单的代码来告诉你发生了什么。

// BookData gets data from Json
struct BookData: Codable 
var titolo: String
var descrizione: String


class FavoriteItems: ObservableObject 
@Published var favItems: [String] = []


struct ContentView: View 
@ObservedObject var bookData = BookDataLoader()
@ObservedObject var favoriteItems = FavoriteItems()

var body: some View 
    NavigationView 
        List 
            NavigationLink(destination: FavoriteView()) 
                Text("Go to favorites")
            
            ForEach(0 ..< bookData.booksData.count)  num in
                HStack 
                    Text("\(self.bookData.booksData[num].titolo)")

                    Button(action: 
                              self.favoriteItems.favItems.append(self.bookData.booksData[num].titolo)
                    ) 
                        Image(systemName: "heart")
                    
                
            
        
    



struct FavoriteView: View 
@ObservedObject var favoriteItems = FavoriteItems()

var body: some View 
    List 
        ForEach (0 ..< favoriteItems.favItems.count)  num in
            Text("\(self.favoriteItems.favItems[num])")
        
    


当我启动应用程序时,我可以转到收藏夹视图,但添加项目后我不能。 我的目标是将一个项目添加到收藏夹,并在我关闭应用程序后保存它

【问题讨论】:

【参考方案1】:

ContentView 中的视图模型 favoriteItems 需要传入到 FavoriteView 中,因为添加新数据时需要一个 favoriteItems 的引用来重新加载 FavoriteView。

改成

NavigationView(destination: FavoriteView(favoriteItems: favoriteItems))@ObservedObject var favoriteItems: FavoriteItems

会好的。

谢谢,X_X

【讨论】:

我明白你的意思,这是有道理的,因为我在 FavoriteView 中创建了另一个未链接到 ContentView 的 FavoriteItems 实例。 主要问题是我需要使用 coredata 在 FavoriteView 中添加、保存和删除项目,我发现主要问题是在我的 ContentView 中将 FavoriteView 作为 NavigationLink 访问,所以我将它分配给另一个我的 tabBar 中的 tabItem 并且完美运行 :)

以上是关于如何在 SwiftUI 中将内容添加到收藏列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中将数据从视图传递到另一个视图?

SwiftUI CoreData - 如何更新获取请求和列表

SwiftUI 添加到收藏夹

如何在 SwiftUI 中将滚动视图添加到屏幕的特定部分? [复制]

如何在 SwiftUI ForEach 内容中将多个按钮操作分开?

在 SwiftUI 中将视图添加到层​​次结构时如何动画过渡