swift - Swift:将数据从 Firestore 获取到数组中的问题
问题描述
从firestore获取数据的完成函数
struct User {
let docID: String
let firstName: String
}
var userArray = [User]()
// ...
//....
func getUserData(completion: @escaping ([User]) -> Void) {
var result = [User]()
guard let userID = Auth.auth().currentUser?.uid else {return}
let db = Firestore.firestore()
db.collection("users").whereField("uid", isEqualTo: userID)
.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
completion(result)
return
}
else {
if let snapshot = querySnapshot {
for document in snapshot.documents {
let data = document.data()
let docid = data["docID"] as? String ?? ""
let firstName = data["firstName"] as? String ?? ""
let lastName = data["lastName"] as? String ?? ""
let email = data["email"] as? String ?? ""
let UData = User(docID: docid, firstName: firstName)
result.append(UData)
print(result)
}
}
} //end ELSE
completion(result)
}
}
在 viewWillAppear 中调用它
override func viewWillAppear(_ animated: Bool) {
getUserData{ (result) in
self.userArray.append(contentsOf: result)
print(self.userArray)
}
}
打印以下内容
[DaDoc.HomeViewController.User(docID: "avGhsRI1x0c", firstName: "Raul")]
问题
为什么“DaDoc.HomeViewController.User”这个被附加到数组中?我不能用“!”打开它 抛出错误“无法强制解开非可选类型 '[HomeViewController.User]' 的值”
我如何在此处访问密钥(docID,名字)[DaDoc.HomeViewController.User(docID:“avGhsRI1x0c”,名字:“Raul”)]
感谢任何帮助!
解决方案
更新:
感谢@jawadAli 的建议-在课堂外移动结构有效
甚至认为我的结果仍然打印如下
[DaDoc.User(docID: "avGhsRI1x0c", firstName: "Raul")].
我能够访问键以将值添加到 tableView,如下所示:
cell.firstNameLabel?.text = userArray[indexPath.row].firstName
推荐阅读
- sql-server - 分布式事务的可靠性
- python - 如何计算Python中出现的概率?
- django - 从用户列表对象创建动态 ModelChoiseField
- laravel - 如何仅从第二个表中找到最后一行及其第一个表行
- python - PyQt5 QListWidget with checkboxes and drag and drop
- java - ClientDetailsService 在身份验证期间被调用 6 次
- php - 在控制器中抓取查询字符串参数,laravel
- c# - 我的应用程序任务不能被cmd杀死
- excel - 将计算机列表从 txt 导出为 CSV 作为列标题 PowerShell
- python - 使用 docutils.parsers.rst 在 reStructredText 中查找超链接