Получить значение из Firestore для следующего запроса Firestore - PullRequest
1 голос
/ 27 марта 2020

Внутри моего приложения пользователь может создать простой список, и в этом списке есть несколько values, которые мне нужно сохранить.

Это шаги, которые я хотел бы выполнить с помощью Cloud-Firestore когда пользователь нажимает на createListButton:

1. для получения value

2. используйте это value save/store список с его свойствами.

Мне удалось реализовать 2 functions:

getListCounter:

static func getListCounter(finished: @escaping (_ done: Bool) -> Void){

    let db = Firestore.firestore()
    let userID = Auth.auth().currentUser!.uid

    let docRef = db.collection("users").document(userID)


    docRef.getDocument { (document, error) in
        if let document = document, document.exists {
            let property = document.get("listCounter")
            print("Document data: \(String(describing: property))")
            finished(true)
        } else {
            print("Document does not exist")
            finished(false)
        }
    }
}

и saveWishlist:

static func saveWishlist(wishListName: String, imageArrayIDX: Int, wishListIDX: Int, textColor: String) {

    // auto create custom Wishlist with name/listIDX/imageIDX
    let db = Firestore.firestore()
    let userID = Auth.auth().currentUser!.uid


    let batch = db.batch()

    // Set username and uid for user
    let userRef = Firestore.firestore().collection("users").document(userID)

    batch.updateData(["listCounter": wishListIDX], forDocument: userRef)


    let listRef = db.collection("users").document(userID).collection("wishlists").document(wishListName)
    batch.setData(["name": wishListName, "listIDX": wishListIDX, "imageIDX" : imageArrayIDX, "textColor": textColor], forDocument: listRef)

    batch.commit { (error) in
        if let error = error {
            Utilities.showErrorPopUp(labelContent: "Liste konnte nicht gespeichert werden", description: error.localizedDescription)
        }
    }
}

Как вы можете видеть, я использую wishListIDX дважды внутри saveWishlist, и значение для этого должно быть результатом getListCounter.

Проблема в том, что я действительно не знаю, как мне этого добиться, getListCounter фактически возвращает value как Int.

Если бы я получил это, я мог бы просто позвонить: var counter = getListCounter() верно? Но использование этого для parameter в saveList может вызвать проблемы, потому что функции асинхронные не так ли?

Если кто-нибудь может помочь мне с этими двумя проблемами, я был бы более чем благодарен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...