arrays - 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()
}
}
}
解决方案
如果您没有将文本“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()
}
}
推荐阅读
- javascript - 如何修改此 LP 求解器的约束以检查推荐配置是否有效?
- python - 是否可以将 3D 图表从 MatPlotLib 导出到 TikZ?
- flowtype - 如何使这两种类型定义完全相同?
- glsl - 你如何画一个sampler2D?
- c# - C# 有没有办法为通用 T SQLiteConnection 表填充变量
? - ssl - Java 7/Tomcat 7 中的 TLS v1.3 支持
- docker - 如何在以 Podman 作为容器引擎的 Ubuntu 系统中运行 Docker Compose 文件
- html - 表单发布请求未返回必要的信息
- javascript - CSS动画导致其他动画滞后
- r - 在 R 中绘制多个模型的风险比