如果文档存在,则在 foreach 循环中设置布尔值
Posted
技术标签:
【中文标题】如果文档存在,则在 foreach 循环中设置布尔值【英文标题】:Set boolean in foreach loop if document exists 【发布时间】:2021-01-13 21:08:25 【问题描述】:我一直在努力解决这个问题,希望有人可以帮助我或为我指明正确的方向。 (如果这是一个愚蠢的问题,我是 swift 的新手,所以很抱歉)。
我在下面发生的是一个 foreeach 循环,如果项目来自 db。在每个项目上,它都会引用数据库中的一个单独文档,以查看该特定用户是否存在该文档。 checkUserAddedItems
中的 print
完美运行,显示每个项目以及该用户是否存在它们。我正在努力解决如果文档存在,如何将items[i].selected
设置为 true,以便它将显示删除按钮而不是该特定项目的添加
非常感谢任何帮助!
@State var items = [ItemsModel]()
var body: some View
VStack
ForEach(items.indices, id: \.self) i in
HStack
Text(items[i].name)
if items[i].selected == false
Button(action: addItem() ) Text("Add")
else
Button(action: removeItem() ) text("Remove")
.onAppear checkUserAddedItems(itemName: items[i].name)
.onAppear fetchItems()
func checkUserAddedItems(itemName: String)
let db = Firestore.firestore()
let docRef = db.collection("users").document("\(userInfo.user.uid)").collection("itemAdded").document(self.movieID).collection("item").document("\(itemName)")
docRef.getDocument (document, error) in
if let document = document, document.exists
print("\(itemName) exists")
else
print("\(itemName) does not exist")
func fetchItems()
let db = Firestore.firestore()
db.collection("movies").document("\(self.movieID)").collection("items").getDocuments (NewQuerySnapshot, error) in
guard let documents = NewQuerySnapshot?.documents else
print("No Documents")
return
items = documents.map (NewQueryDocumentSnapshot) -> ItemsModel in
let data = NewQueryDocumentSnapshot.data()
let name = data["name"] as? String ?? ""
return ItemsModel(name: name)
struct ItemsModel: Identifiable
var id: String = UUID().uuidString
var name: String
var selected:Bool = false
【问题讨论】:
【参考方案1】:您需要使用已在正确项目上设置值的更新后的项目数组来重置您的状态变量。一种解决方案是在数组上执行map
并且只修改一个值。
类似:
func setSelectedOnItem(id: String, val: Boolean)
items = items.map item in
if item.id == id
var newItem = item
newItem.selected = val
return newItem
else
return item
然后,在您的checkUserAddedItems
函数中,调用上述方法,从文档中填写id
。您大概只需要在它存在时调用它 - 否则它将保持错误。
【讨论】:
以上是关于如果文档存在,则在 foreach 循环中设置布尔值的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot:如果不存在,则在启动时在 mongodb 中创建文档
如果存在,则在 mongodb 中增加嵌套字段值或创建嵌套字段