【发布时间】:2021-04-25 23:05:41
【问题描述】:
我是开发新手,我在我的应用程序中使用 Firestore,我的目标是当用户在 textField 中写入 "Hello World" 时从 Firestore 获取数据。我设法从 Firestore 获取数据,一切都很好,但是当我使用 if 语句时,函数不会启动代码。
这是我的代码,没有使用 if 语句,它可以 100% 工作
import UIKit
import FirebaseFirestore
import Firebase
import FirebaseAuth
class orderTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
@IBOutlet var order: UITableView!
@IBOutlet var userNameField: UITextField!
var db: Firestore!
let DocRefernce:DocumentReference! = nil
var street = [String]()
var firstName = [String]()
var lastName = [String]()
var blockNumber = [String]()
var phone = [String]()
var houseNumber = [String]()
var block = [String]()
var Area = [String]()
override func viewDidLoad() {
super.viewDidLoad()
order.register(UINib(nibName: "Order1TableViewCell", bundle: nil) , forCellReuseIdentifier: "order")
order.separatorStyle = .none
order.dataSource = self
order.delegate = self
db = Firestore.firestore()
self.navigationItem.setHidesBackButton(true, animated: true)
loadData1()
loadData2()
}
func loadData1() {
db.collection("Hi").getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
}
else
{
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())");
self.firstName.append(document.get("firstname") as? String ?? "")
self.lastName.append(document.get("lastname") as? String ?? "")
self.street.append(document.get("street") as? String ?? "")
self.blockNumber.append(document.get("blockNumber") as? String ?? "")
self.Area.append(document.get("area") as? String ?? "")
self.phone.append(document.get("phone") as? String ?? "")
self.houseNumber.append(document.get("houseNumber") as? String ?? "")
}
}
self.order.reloadData()
}
}
func loadData2() {
db.collection("hola").getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
}
else
{
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())");
self.firstName.append(document.get("firstname") as? String ?? "")
self.lastName.append(document.get("lastname") as? String ?? "")
self.street.append(document.get("street") as? String ?? "")
self.blockNumber.append(document.get("blockNumber") as? String ?? "")
self.Area.append(document.get("area") as? String ?? "")
self.phone.append(document.get("phone") as? String ?? "")
self.houseNumber.append(document.get("houseNumber") as? String ?? "")
}
}
self.order.reloadData()
}
}
}
这是我使用 if 语句的代码,但我无法从 Firestore 获取数据。
import UIKit
import FirebaseFirestore
import Firebase
import FirebaseAuth
class orderTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
@IBOutlet var order: UITableView!
@IBOutlet var userNameField: UITextField!
var db: Firestore!
// let DocRefernce:DocumentReference! = nil
var street = [String]()
var firstName = [String]()
var lastName = [String]()
var blockNumber = [String]()
var phone = [String]()
var houseNumber = [String]()
var block = [String]()
var Area = [String]()
override func viewDidLoad() {
super.viewDidLoad()
userNameField.delegate = self
order.register(UINib(nibName: "Order1TableViewCell", bundle: nil) , forCellReuseIdentifier: "order")
order.separatorStyle = .none
order.dataSource = self
order.delegate = self
db = Firestore.firestore()
self.navigationItem.setHidesBackButton(true, animated: true)
if userNameField.text == "Hello World" {
loadData1()
} else {
loadData2()
}
}
func loadData1() {
db.collection("Hi").getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
}
else
{
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())");
self.firstName.append(document.get("firstname") as? String ?? "")
self.lastName.append(document.get("lastname") as? String ?? "")
self.street.append(document.get("street") as? String ?? "")
self.blockNumber.append(document.get("blockNumber") as? String ?? "")
self.Area.append(document.get("area") as? String ?? "")
self.phone.append(document.get("phone") as? String ?? "")
self.houseNumber.append(document.get("houseNumber") as? String ?? "")
}
}
self.order.reloadData()
}
}
func loadData2() {
db.collection("hola").getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: \(err)");
}
else
{
for document in querySnapshot!.documents {
print("\(document.documentID) => \(document.data())");
self.firstName.append(document.get("firstname") as? String ?? "")
self.lastName.append(document.get("lastname") as? String ?? "")
self.street.append(document.get("street") as? String ?? "")
self.blockNumber.append(document.get("blockNumber") as? String ?? "")
self.Area.append(document.get("area") as? String ?? "")
self.phone.append(document.get("phone") as? String ?? "")
self.houseNumber.append(document.get("houseNumber") as? String ?? "")
}
}
self.order.reloadData()
}
}
}
【问题讨论】:
-
if 语句位于 viewDidLoad 方法中,这意味着其中的代码只会在应用程序启动时执行,因此您的 textField 中不会包含任何文本。您必须在 textField 的委托中执行此检查过程,一旦用户将一些文本放入其中并点击返回按钮/以任何其他方式退出它。如果这就是您要查找的内容,我可以在下面提供完整的解释 - 只需回复此评论即可。
标签: arrays swift firebase google-cloud-firestore firebase-authentication