【发布时间】:2021-09-11 08:51:03
【问题描述】:
我正在尝试创建一个功能,如果用户喜欢帖子,关闭应用程序并重新加载应用程序,点赞按钮仍然是红色的,用户将无法再次点赞该帖子,除非他们先不喜欢它。
之前的一篇文章建议我使用数组,这正是我所做的。我创建了一个数组,当一篇文章被点赞时,用户 UID 会转到该数组。数组在“Posts/(postid)”中
现在,我想不通的是如何查看用户 UID 是否等于在此数组中找到的 UID。我的目标是如果用户 UID 已经在数组上,则将变量“isLiked”设置为 true。如果不是,让“isLiked”为假(已经完成)。
PostViewModel.swift
func addLike(id: String){
ref.collection("Posts").document(id).updateData(["likes": FieldValue.increment(Int64(1))]) { (err) in
if err != nil{
print(err!.localizedDescription)
return
}
self.ref.collection("Posts").document(id).updateData([
"likedBy": FieldValue.arrayUnion([self.uid])
])
}
}
func unLike(id: String){
ref.collection("Posts").document(id).updateData(["likes": FieldValue.increment(Int64(-1))]) { (err) in
if err != nil{
print(err!.localizedDescription)
return
}
self.ref.collection("Posts").document(id).updateData([
"likedBy": FieldValue.arrayRemove([self.uid])
])
}
}
PostRow.swift
@State private var isLiked = false
HStack {
Button(action: {if isLiked == false{
postData.addLike(id: post.id)
isLiked = true
} else{
postData.unLike(id: post.id)
isLiked = false
}}, label: {
Image(systemName: isLiked ? "heart.fill" : "heart")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 20)
.foregroundColor(isLiked ? .red : .gray)
})
}
【问题讨论】:
标签: ios swift firebase google-cloud-firestore swiftui