【问题标题】:Passing documentID of Firestore using segue in Swift在 Swift 中使用 segue 传递 Firestore 的 documentID
【发布时间】:2020-12-06 15:51:28
【问题描述】:

我正在通过制作应用程序同时学习 Swift 和 firebase。在我当前的 firestore 中,我有一个集合名称为 Players 的数据库,在集合内部,有一个带有 auto-documentID 的文档和两个字段,例如名称和电子邮件。像这样。 firestore image

我也使用 Firebase 身份验证,因此每当用户创建帐户时,我都会将他们的电子邮件放入带有字段名称电子邮件的 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 中检查用户的文档名称字段中是否有名称,因此如果文档中名称字段的值为"",我想显示带有 textfeild 的警报,所以用户可以添加他们的名字。但是,在 HomeViewController 中,我需要 documentID,因为我将在 HomeVC 中使用此代码 db.collection(K.FStore.playersCollection).document(documentID).getDocument,所以我想传递用户的 documentID(在 RegisterVC 中,我能够得到 ref?.documentID 的值,所以我只是想将值传递给 HomeVC)给 HomeVC。我尝试使用func prepare(for segue: UIStoryboardSegue, sender: Any?),但无法传递值...

【问题讨论】:

    标签: ios swift firebase google-cloud-firestore segue


    【解决方案1】:

    将您的代码更改为:

    //在你的代码顶部定义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)
           }
       }   
    }
    

    //Out of registerPressed func :

    // 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
       }
     }
    

    【讨论】:

    • 所以如果我将函数准备放在 registerPressed 函数之外,我如何访问 ref?.documentID?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多