简体   繁体   English

从 Firestore Swift 获取每个用户的文档

[英]Get document for each user from Firestore Swift

Im trying to get document for each user login to his account, i have two collections in Firestore one called ( firstName ) and the second one called ( lastName ) and i want from user 1 to get ( firstName ) collection only and user number 2 to get ( lastName ) collection only.我试图为每个用户登录到他的帐户获取文档,我在 Firestore 中有两个 collections 一个称为( firstName ),第二个称为( lastName ),我希望从用户 1 获取( firstName )仅收集和用户号 2仅获取 ( lastName ) 集合。

i tried with if statement but it doesn't work with me.我尝试使用 if 语句,但它不适用于我。

import UIKit
import FirebaseFirestore
import Firebase
import FirebaseAuth

class namesTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {

@IBOutlet var names: UITableView!
var db: Firestore!
var firstName = [String]()
var lastName = [String]()


override func viewDidLoad() {
    super.viewDidLoad()
    
    
    names.register(UINib(nibName: "Order1TableViewCell", bundle: nil) , forCellReuseIdentifier: "order")
    
    names.dataSource = self
    names.delegate = self
    
    db = Firestore.firestore()

   

let storyboard = UIStoryboard(name: "Main", bundle: nil)
    guard let viewController1 = storyboard.instantiateViewController(withIdentifier: "login") as? logInViewController else{return}        
   viewController1.userNameField?.delegate = self

 
    if viewController1.userNameField?.text == “1@1.com" {
     loadData1()
    }

    if viewController1.userNameField?.text == “2@2.com” {
     loadData2()
    }
    
       

func loadData1() {
    db.collection("firstName").getDocuments()
    {
        (querySnapshot, err) in
        
        if let err = err
        {
            print("Error getting documents: \(err)");
        }
        else
        {
            for document in querySnapshot!.documents {
                
                self.firstName.append(document.get("firstname") as? String ?? "")
                self.lastName.append(document.get("lastname") as? String ?? "")
            }
        }
        self.names.reloadData()
    }
}




func loadData2() {
    db.collection("lastName").getDocuments()
    {
        (querySnapshot, err) in
        
        if let err = err
        {
            print("Error getting documents: \(err)");
        }
        else
        {
            
            for document in querySnapshot!.documents {
                self.firstName.append(document.get("firstname") as? String ?? "")
                self.lastName.append(document.get("lastname") as? String ?? "")
            }
        }
        self.names.reloadData()
    }
}
}

this is logInViewController code这是 logInViewController 代码

import UIKit
import Firebase
import FirebaseAuth

class logInViewController: UIViewController, UITextFieldDelegate {

@IBOutlet var userNameField: UITextField!
@IBOutlet var passwordField: UITextField!
@IBOutlet var logInButton: UIButton!


override func viewDidLoad() {
    
    logInButton.layer.cornerRadius = 4.0
    super.viewDidLoad()
    
    userNameField.delegate = self
    passwordField.delegate = self

    // Do any additional setup after loading the view.
}


@IBAction func logInButtonClicked(_ sender: Any) {
    
    Auth.auth().signIn(withEmail: (userNameField.text ?? ""), password: (passwordField.text ?? "")) { (result, error) in
              if let _eror = error{
                let alert = UIAlertController(title: "Error", message: error!.localizedDescription, preferredStyle: .alert)
                               let okAction = UIAlertAction(title: "Ok", style: .default, handler: nil)
                               alert.addAction(okAction)
                               self.present(alert,animated: true)
                  print(_eror.localizedDescription)
              }else{
                  if let _res = result{
                      print(_res)
                  }
                
                
               
                
        
                
                let VC1 = self.storyboard!.instantiateViewController(withIdentifier: "order1") as! namesTableViewController
                self.navigationController!.pushViewController(VC1, animated: true)
                
                
                
                
              }
          }
 }


}

this is fire store structure image这是火库结构图像

Be careful by doing let view1 = firstViewController() you are not grabbing the correct instance of firstViewController but one you just created.请注意,通过let view1 = firstViewController()获取的不是正确的firstViewController实例,而是刚刚创建的。 User.text therefore won't be set.因此不会设置User.text You need to grab the right instance of it, if you are using storyboard you can do:您需要获取它的正确实例,如果您使用的是 storyboard,您可以执行以下操作:

let storyboard = UIStoryboard(name: "nameofstoryboard", bundle: nil)
guard let viewController1 = storyboard.instantiateViewController(withIdentifier: "myIdentifier") as? firstViewController else{return} //set VC Identifier in Storyboard identity inspector

Then you can check the User property with if-statement然后您可以使用if-statement检查User属性

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM