以不同的标签Swift4访问Firestore文档和打印输出的字段

时间:2018-04-08 19:25:57

标签: ios swift swift4 google-cloud-firestore

我正在尝试学习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")
            }
        }

    }

}

0 个答案:

没有答案