我正在尝试将切换按钮的状态与 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")
}
}
终于我解决了这个问题。
func isUserFavoriteFlyer(flyerId: String) -> Bool {
// this array reed data from firestore rather than UserDefault
return FavoriteFlyer.contains { $0.flyerId == flyerId }
}