首页 > 解决方案 > func没有在if语句内部执行

问题描述

我试图从 Firestore 中为某些用户获取数据,我的意思是如果有一个用户,他的名字是 Mark,他登录到他的帐户我想从 Firestore 中获取MarkCollection,所以我决定使用 if 语句,但它没有不行。在第一个示例中,我可以获取数据,但我希望仅为用户 Mark 显示此数据,在第二个示例中,我使用了 if 语句,但问题是loadData1()无法在 if 语句中执行。

第一个例子:

import UIKit
import FirebaseFirestore
import Firebase
import FirebaseAuth

class orderTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {



@IBOutlet var userName: UITextField!

var db: Firestore!
var phone = [String]()
var reciept = [String]()
var price = [String]()
var amount = [String]()
var Area = [String]()

override func viewDidLoad() {
    super.viewDidLoad()
    
    
    loadData1()
}


func loadData1() {
    
    db.collection("markCollection").getDocuments() {
        
        (querySnapshot, err) in
        
        if let err = err
        
        {
            print("Error getting documents: \(err)");
        }
        else
        {
            for document in querySnapshot!.documents {
                
                self.Area.append(document.get("area") as? String ?? "")
                self.phone.append(document.get("phone") as? String ?? "")
                self.reciept.append(document.get("reciept") as? String ?? "")
                self.price.append(document.get("total price") as? String ?? "")
                self.amount.append(document.get("amount") as? String ?? "")
            }
        }
        self.order.reloadData()
    }
}
}

这是我使用 if 语句时的问题,loadData1() 函数无法执行这里是示例 2 的代码:

import UIKit
import FirebaseFirestore
import Firebase
import FirebaseAuth

    class orderTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
    
    
    
    @IBOutlet var userName: UITextField!
    
    var db: Firestore!
    var phone = [String]()
    var reciept = [String]()
    var price = [String]()
    var amount = [String]()
    var Area = [String]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if userName.text == "Mark" {
         loadData1()
   
        }
  
        
    }
    
    
    func loadData1() {
        
        db.collection("markCollection").getDocuments() {
            
            (querySnapshot, err) in
            
            if let err = err
            
            {
                print("Error getting documents: \(err)");
            }
            else
            {
                for document in querySnapshot!.documents {
                    
                    self.Area.append(document.get("area") as? String ?? "")
                    self.phone.append(document.get("phone") as? String ?? "")
                    self.reciept.append(document.get("reciept") as? String ?? "")
                    self.price.append(document.get("total price") as? String ?? "")
                    self.amount.append(document.get("amount") as? String ?? "")
                }
            }
            self.order.reloadData()
        }
    }
}

[1] [1]:https ://i.stack.imgur.com/5YONj.png

标签: arraysswiftgoogle-cloud-firestore

解决方案


如果您没有将文本“Mark”设置为 textField 的默认文本,则在视图周期处于“ViewDidLoad”时它为 nil。当用户使用键盘输入内容时,它会发生在不同的循环中。

您应该检查if userName.text == "Mark"用户何时点击键盘上的“完成”按钮,或者在用户键入时检查 TextFields 委托。

检查用户输入;

您可以在 viewDidLoad 中添加它;

userName.addTarget(self, action: #selector(textFieldDidChange(_:)),
                              for: .editingChanged)

然后,在视图控制器中;

@objc private func textFieldDidChange(_ textField: UITextField) {
    print(textField.text) // so that you can see whether you can successfully connect the outlet. if nothing prints, it means that you could not connect it properly.
    if textField.text = "Mark" {
     loadData1()
  }
}

推荐阅读