程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么@DocumentID 在用作 ID 参数时不允许更新列表行?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决为什么@DocumentID 在用作 ID 参数时不允许更新列表行??

开发过程中遇到为什么@DocumentID 在用作 ID 参数时不允许更新列表行?的问题如何解决?下面主要结合日常开发的经验,给出你关于为什么@DocumentID 在用作 ID 参数时不允许更新列表行?的解决方法建议,希望对你解决为什么@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
}

LisTingRowviewmodel.swift

此文件将 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,请注明来意。