IOS SWIFT5: указана проверка c поле odcument существует в firestore - PullRequest
0 голосов
/ 10 июля 2020

Кажется, нет способа использовать логическое значение, чтобы вернуть результат проверки, существует или нет. он работает только при распечатке результата ...

    func checkSeatAvailable() -> Bool{
       var Exist: Bool
       let g = DispatchGroup()
        let resDate = ResDateTxt.text
        let db = Firestore.firestore()
        let docRef = db.collection("Reservations").whereField("resDate", isEqualTo: resDate!)
        g.enter()
        docRef.getDocuments() { (snapshot, error) in
                                if let snapshot = snapshot {
                                    if snapshot.isEmpty {
                                            print("Document does not exist")
                                        Exist =  true
                                        g.leave()
                                         } else {
                                        print("Document data: \(snapshot) ")
                                        Exist = false
                                        g.leave()
                                        }
                                    }
        }
        g.notify(queue:.main) {}
        print("\(Exist)")
        return Exist
    }

1 Ответ

0 голосов
/ 10 июля 2020

Добавьте completion Handler в свою функцию, поскольку getDocuments функция является асинхронной, и немедленно верните ее. Вы можете изменить его так.

func checkSeatAvailable(Completion:@escaping((Bool)->())){
 //let g = DispatchGroup()
   let resDate = ResDateTxt.text
   let db = Firestore.firestore()
   let docRef = db.collection("Reservations").whereField("resDate", isEqualTo: resDate!)
    //g.enter()
    docRef.getDocuments() { (snapshot, error) in
         if let snapshot = snapshot {
              if snapshot.isEmpty {
                     print("Document does not exist")
                     //g.leave()
               } else {
                         print("Document data: \(snapshot) ")
                          Completion(true)
                           //g.leave()
                       }
                    }
                }
    
    //g.notify(queue:.main) {}
    //print("\(Exist)")
    //return Exist
}

А затем вызвать эту функцию вот так:

checkSeatAvailable { (boolValue) in
      
      print(boolValue)
 }
...