【问题标题】:how do I use a variable in its own completion handler如何在自己的完成处理程序中使用变量
【发布时间】:2020-10-11 02:52:55
【问题描述】:

我目前正在尝试将 firebase 集成到我的 ios 应用程序中。我正在开发的功能之一是在每个用户注册时在 Cloud Firestore 中建立数据。当他们在我的应用程序中单击“注册”时,它会使用 Firebase 授权创建一个新用户,并且我在我的数据库中的“用户”集合中创建一个用户文档。但是当我创建将存储他们的“朋友”的用户时,我还想为每个用户添加一个子集合。这是按下注册按钮时创建用户文档的代码。我利用函数返回功能来获取对我刚刚创建的文档的引用。然后,我想在创建文档后使用该引用来创建子集合,即在调用完成处理程序时。但是“usersDocRef”在完成处理程序显然被调用之后才被赋予一个值。所以我不能在那里做。如何在完成处理程序中访问对文档的引用,或者在创建文档后使用该引用添加子集合?我试图避免查询以检索参考或任何更多的读取操作以提高效率(因为这与火力基地的计费成本呈线性关系)。任何帮助将不胜感激

let userDocRef = self.db.collection(K.FStore.Collections.usersRootCollection).addDocument(data: [K.FStore.Fields.username : email]) { (error) in
                        if let error = error {
                            print("Error registering: \(error)")
                        } else {
                            ///want to use userDocRef here (obviously can't, workarounds?)
                        }
                    }

【问题讨论】:

    标签: ios swift firebase google-cloud-firestore


    【解决方案1】:

    在上一行中将 userDocRef 声明为 Optional:

    var userDocRef: DocumentReference? = nil
    userDocRef = self.db.collection(K.FStore.Collections.usersRootCollection).addDocument...
    

    现在 Swift 编译器将允许您从完成处理程序内部引用 userDocRef

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多