будем

ользую GCD для уведомления основного потока (есть 2 асинхронных вызова внутри функции)

Мой код:

func getWavesByMostRecent(closure: @escaping ([Wave]?) -> Void) {
    var waves = [Wave]()
    let dispatchGroup = DispatchGroup()

    self.query = DatabaseManager.waveRef.queryOrdered(byChild: Constants.reverseTimeStampKey)
    self.handle = self.query?.observe(.value, with: { (snapshot) in

        for value in snapshot.children {
            guard let wave = Wave(snapshot: value as! DataSnapshot) else { return }

            self.geoFire = GeoFire(firebaseRef: DatabaseManager.waveRef)
            let currentLocation = LocationManager.shared.getCurrentLocation()

            dispatchGroup.enter()
            self.geoFire?.getLocationForKey(wave.waveID, withCallback: { (location, error) in
                guard let location = location else { return }
                if error == nil {
                    if location.distance(from: currentLocation) < Constants.distance {
                        print("Wave", wave.waveID, "is in range")
                        waves.append(wave)
                    } else {
                        print("Wave", wave.waveID, "is out of range")
                    }
                } else {
                    print(error?.localizedDescription ?? "")
                }
                dispatchGroup.leave()
            })
        }
        dispatchGroup.notify(queue: .main) {
            print("THERE ARE SO MANY WAVES:", waves.count)
            closure(waves)
        }
    })
}

Но закрытие .notify просто не работает, и я не могу назвать свое «главное» закрытие правильным. Что я делаю неправильно? Любой совет будет принят во внимание.

Ответы на вопрос(2)

Ваш ответ на вопрос