Ios 在Swift中使用segue传递Firestore的documentID

Ios 在Swift中使用segue传递Firestore的documentID,ios,swift,firebase,google-cloud-firestore,segue,Ios,Swift,Firebase,Google Cloud Firestore,Segue,我正在通过制作一个应用程序学习Swift和firebase。在我当前的firestore中,我有一个数据库,其中有一个集合名为Players,在集合内部,有一个文档具有auto documentID和两个字段,例如name和email。这样地。 我还使用Firebase Auth,因此每当用户创建帐户时,我都会将他们的电子邮件和字段名email一起放入firestore 下面是RegisterViewController的代码,用户在其中使用电子邮件和密码注册帐户 import UIKit i

我正在通过制作一个应用程序学习Swift和firebase。在我当前的firestore中,我有一个数据库,其中有一个集合名为Players,在集合内部,有一个文档具有auto documentID和两个字段,例如name和email。这样地。

我还使用Firebase Auth,因此每当用户创建帐户时,我都会将他们的电子邮件和字段名email一起放入firestore

下面是RegisterViewController的代码,用户在其中使用电子邮件和密码注册帐户

import UIKit
import Firebase

class RegisterViewController: UIViewController {


    @IBOutlet weak var emailTextField: UITextField!
    @IBOutlet weak var passwordTextField: UITextField!

    let db = Firestore.firestore()

    override func viewDidLoad() {
        super.viewDidLoad()

    }



    //MARK: - register a new account

    @IBAction func registerPressed(_ sender: UIButton) {
    
        if let email = emailTextField.text, let password = passwordTextField.text {
        
            Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
            
            
                if error != nil {
                
                // some codes here
                
                
                } else {
                
                    // Add a new document with a generated ID
                    var ref: DocumentReference? = nil
                
                    ref = self.db.collection(K.FStore.playersCollection).addDocument(data: [K.FStore.emailField: email, K.FStore.nameField: ""]) { (error) in
                    
                        if let err = error {
                            print("There was an issue storing data to firestore. \(err)")
                        } else {
                            print("Document added with ID: \(ref!.documentID)")
                        }
                    }
                
                    // pass this data
                
                    func prepare(for segue: UIStoryboardSegue, sender: Any?) {
                        if segue.identifier == K.registerToHome {
                            let homeVC = segue.destination as! HomeViewController
                        
                            homeVC.documentID = ref?.documentID
                        }
                    }
                
                     self.performSegue(withIdentifier: K.registerToHome, sender: self)
                
                }
            
            }
        
        }
    }



}
我计划在下一个HomeViewController中检查用户的文档名称字段中是否有名称,因此如果文档中的名称字段的值为
“”
,我希望显示一个带有文本字段的警报,以便用户可以添加其名称。但是,在HomeViewController中,我需要documentID,因为我将在HomeVC中使用以下代码:
db.collection(K.FStore.playersCollection).document(documentID).getDocument
,因此我希望传递用户的documentID(在RegisterVC中,我可以将值作为
ref?.documentID
,因此我只想将值传递给HomeVC)到HomeVC。我尝试使用
func prepare(对于segue:UIStoryboardSegue,sender:Any?
,但无法传递值…

将代码更改为:

//代码顶部定义
id

var id = ""

else {
   // Add a new document with a generated ID
   var ref: DocumentReference? = nil
            
   ref = self.db.collection(K.FStore.playersCollection).addDocument(data: [K.FStore.emailField: email, K.FStore.nameField: ""]) { (error) in
                
       if let err = error {
          print("There was an issue storing data to firestore. \(err)")
       } else {
          print("Document added with ID: \(ref!.documentID)")
          self.id = ref!.documentID 
          self.performSegue(withIdentifier: K.registerToHome, sender: self)
       }
   }   
}
// pass this data
            
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
   if segue.identifier == K.registerToHome {
        let homeVC = segue.destination as! HomeViewController
                    
         homeVC.documentID = self.id
   }
 }
//注册表外的压缩函数:

var id = ""

else {
   // Add a new document with a generated ID
   var ref: DocumentReference? = nil
            
   ref = self.db.collection(K.FStore.playersCollection).addDocument(data: [K.FStore.emailField: email, K.FStore.nameField: ""]) { (error) in
                
       if let err = error {
          print("There was an issue storing data to firestore. \(err)")
       } else {
          print("Document added with ID: \(ref!.documentID)")
          self.id = ref!.documentID 
          self.performSegue(withIdentifier: K.registerToHome, sender: self)
       }
   }   
}
// pass this data
            
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
   if segue.identifier == K.registerToHome {
        let homeVC = segue.destination as! HomeViewController
                    
         homeVC.documentID = self.id
   }
 }

所以,如果我将函数prepare放在registerPressed函数之外,我如何访问ref?.documentID?