SwiftUI Firebase Firestore Функция запроса - PullRequest
0 голосов
/ 09 января 2020

У меня есть массив номеров SKU, которые я возвращаю из Google Firestore "[428024, 4298212]".

Я написал функцию, присваивающую массив SKU переменной, но я потерян о том, как вернуть эту переменную из функции.

let db = Firestore.firestore()

func getItems() -> [Int]   {
    let userID = Auth.auth().currentUser?.uid ?? "nil"

    if (session.session != nil) {
        self.data.removeAll()
        db.collection("users").document(userID).getDocument { (document, error) in
            if let document = document, document.exists {
                 let itemID = document.get("items") as! Array<Int>
               print(itemID as Any)
               // Prints "[428024, 4298212]"
                return itemID
                } else {
                    print("Document does not exist")
                    }
                }
        }      
}

Я получаю сообщение об ошибке "Неожиданное возвращаемое значение void в функции void, хотя я вижу, что массив SKU возвращается, когда он запускает строку «print (itemID as Any)».

Есть ли какая-либо ошибка в том, как я написал функцию?

1 Ответ

1 голос
/ 13 января 2020

Запрос документа через Firestore записывается с использованием обработчика завершения, и попытка вернуть любое значение из этого обработчика в исходную функцию доставит эту ошибку. Вместо этого вам необходимо настроить исходную функцию getItems(), чтобы учесть это следующим образом:

let db = Firestore.firestore()
@State private var itemIDs: [Int] = []

func getItems(completion: @escaping (_ itemIDs: [Int]?) -> ()) {

    let userID = Auth.auth().currentUser?.uid ?? "nil"

    if (session.session != nil) {
        self.data.removeAll()
        db.collection("users").document(userID).getDocument { (document, error) in
            if let document = document, document.exists {
                 let itemIDs = document.get("items") as! Array<Int>
                 completion(itemIDs) // call completion handler to return value
            } else {
                 print("Document does not exist")
            }
        }
    }      
}


func callingYourFunction() {

    self.getItems() { itemIDs in 
        if let ids = itemIDs {
          // itemIDs exists -> do whatever else you originally intended to do with the ids
          self.itemIDs = ids
        }
    }
}

Посмотрите на здесь , если вы хотите узнать больше о замыканиях и обработчики завершения! Надеюсь, это поможет.

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