Ios 如何在自己的完成处理程序中使用变量

Ios 如何在自己的完成处理程序中使用变量,ios,swift,firebase,google-cloud-firestore,Ios,Swift,Firebase,Google Cloud Firestore,我目前正在尝试将firebase集成到我的ios应用程序中。我正在研究的一个特性是在云firestore中为每个用户注册时建立数据。当他们在我的应用程序中单击“注册”时,它会使用firebase授权创建一个新用户,我会在“用户”集合中的数据库中创建一个用户文档。但我还想在创建存储他们的“朋友”的用户时,为每个用户添加一个子集合。下面是我在按下register按钮时创建用户文档的代码。我利用函数返回功能获取对我刚刚创建的文档的引用。然后,我希望在创建文档后,即调用完成处理程序时,使用该引用创建子集

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

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?)
                        }
                    }

在前一行中将
userDocRef
声明为可选项:

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

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

一个简单的解决方案和事实,我希望在几个小时前就知道,非常感谢!在我的书中: