我正在尝试学习Swift并且正在使用Firestore取得良好的进展,但我正在努力以一种允许我操作从文档中返回的数据的方式理解fetch / get方法。
具体来说,我做了一个相当简单的CRUD应用程序,它向Firestore添加了“锻炼”,然后有按钮来更新/删除条目。
我现在想做的是:
获取文档,然后以不同的标签打印字段。我想这意味着我必须将文档放入一个数组,然后以某种方式选择锻炼中的每个“步骤”并更改label.text但我真的卡住了!
我已经检查了很多答案(比如Android how to search at firestore document's field的答案),但我似乎无法找到一个简单解释来帮助我实现我的目标尝试(希望以某种方式让我理解'为什么'和'如何',所以我希望将来不必问这些基本问题!
这是我的代码:
import UIKit
import Firebase
import FirebaseFirestore
class WorkoutBuilderController: UIViewController {
//create a label to print one of the steps - I'd need 2 more of these to print step2 and step3
@IBOutlet weak var workoutLabel: UILabel!
let db = Firestore.firestore()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//function to add the workout document
@IBAction func generateButtonPressed(_ sender: UIButton) {
db.collection("Workout").document("Arnolds Bananas").setData([
"Step1": "Push Up",
"Step2": "Viking Press",
"Step3": "Sit Up"
]) { err in
if let err = err {
print("Error writing document: \(err)")
} else {
print("Document successfully written!")
}
}
}
//function to delete the document/workout
@IBAction func deleteButtonPressed(_ sender: UIButton) {
db.collection("Workout").document("Arnolds Bananas").delete() { err in
if let err = err {
print("Error removing document: \(err)")
} else {
print("Document successfully removed!")
}
}
}
//function to update step 1 from 'push ups' to 'jumping jacks'
@IBAction func updateButtonPressed(_ sender: UIButton) {
db.collection("Workout").document("Arnolds Bananas").updateData([
"Step1": "Jumping Jacks"])
{ err in
if let err = err {
print("Error updating document: \(err)")
} else {
print("Document successfully updated")
}
}
}
//try to make a function that gets the document and prints step1, step2 and step3 in different labels
@IBAction func readButtonPressed(_ sender: UIButton) {
let documentreference = db.collection("Workout").document("Arnolds Bananas")
documentreference.getDocument { (document, error) in
if let document = document, document.exists {
let workoutReturned = document.data().map(String.init(describing:)) ?? "nil"
print("Document data: \(workoutReturned)")
} else {
print("Document does not exist")
}
}
}
}