如何更新 SwiftUI 中的切换开关并将其状态存储在 Firestore 中?

问题描述 投票:0回答:1

我正在尝试将切换按钮的状态与 Firestore 同步,但我还没有足够的知识来实现它。此按钮用于在收藏夹列表中添加和删除项目。收藏夹列表本身已与 Firestore 同步,但我面临保持切换按钮状态同步的问题。

我目前正在使用 UserDefaults 进行临时存储,但我知道这不是一个理想的解决方案。

视图模型:

@Published var favoriteItem: Set<String> {
        didSet {
            UserDefaults.standard.set(Array(favoriteItem), forKey: "favoriteItem")
        }
    }

    init() {
        // Retrieve favorite items from UserDefaults
        if let storedFavorites = UserDefaults.standard.array(forKey: "favoriteItem") as? [String] {
            favoriteItem = Set(storedFavorites)
        } else {
            favoriteItem = []
        }
    }

    func isUserFavorite(itemId: String) -> Bool {
        return favoriteItem.contains(itemId)
    }

    func toggleFavorite(itemId: String) {
        if isUserFavorite(itemId: itemId) {
            // Remove
            favoriteItem.remove(itemId)
            removeUserFavoriteItem(favoriteItemId: itemId)
            
        } else {
            // Add
            favoriteItem.insert(itemId)
            addUserFavoriteItem(itemId: itemId)
        }
    }

查看:

private var favoriteButton: some View {
    Button {
        viewModel.toggleFavorite(itemId: itemId)
    } label: {
        Image(systemName: viewModel.isUserFavorite(itemId: itemId) ? "bookmark.fill" : "bookmark")
    }
}
swift firebase google-cloud-firestore
1个回答
0
投票

终于我解决了这个问题。

func isUserFavoriteFlyer(flyerId: String) -> Bool {
        // this array reed data from firestore rather than UserDefault
        return FavoriteFlyer.contains { $0.flyerId == flyerId }
    }

© www.soinside.com 2019 - 2024. All rights reserved.