大佬教程收集整理的这篇文章主要介绍了为什么@DocumentID 在用作 ID 参数时不允许更新列表行?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在处理一个 SwiftUI 项目并使用 Firestore 作为后端。我使用 @documentID 作为对象的 ID 属性。我注意到,当我使用 ID 将 List/ForEach 中的项目标识为视图的一部分时,如果我更新 Firebase 中的对象,该行不会更新。如果将 ID 属性更改为 String 并删除 @documentID 属性包装器,则对 Firestore 中对象的更新会更新该行。
我唯一能想到的是,当您使用@documentID 时,该属性将成为文档的名称,并且该属性不会存储在文档中。使用字符串时,属性存储在文档中。下面我有使用@documentID 和字符串的代码。
LisTing.swift - 模型 - 使用 @documentID - 数据库更新时行不更新
struct LisTing: Codable,IDentifiable {
@documentID var ID: String
var description: String
}
LisTing.swift - 模型 - 使用字符串 - 数据库更新时更新行
struct LisTing: Codable,IDentifiable {
var ID: String
var description: String
}
此文件将 ID 分配给 LisTingRowviewmodel 上的 ID 变量。列表的 ForEach 循环中使用的 LisTingRowviewmodels。
class LisTingRowviewmodel: ObservabLeobject {
var ID: String = ""
@Published var LisTing: LisTing
private var cancellables = Set<AnyCancellable>()
init(LisTing: LisTing) {
self.LisTing = LisTing
$LisTing
.receive(on: RunLoop.main)
.compactMap { LisTing in
LisTing.ID
}
.assign(to: \.ID,on: self)
.store(in: &cancellables)
}
}
在视图中使用的列表和 ForEach
List {
ForEach(self.marketplaceviewmodel.LisTingRowviewmodels,ID: \.ID) { LisTingRowviewmodel in
Navigationlink(desTination: LisTingDetailVIEw(LisTingDetailviewmodel: LisTingDetailviewmodel(LisTing: LisTingRowviewmodel.LisTing))) {
LisTingRowVIEw(LisTing: LisTingRowviewmodel.LisTing)
}
}
}
有没有办法使用 @documentID 属性包装器并允许在 Firestore 中更新对象时更新行数据?
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的为什么@DocumentID 在用作 ID 参数时不允许更新列表行?全部内容,希望文章能够帮你解决为什么@DocumentID 在用作 ID 参数时不允许更新列表行?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。