Cómo realizar una acción solo después de descargar los datos de Firebase

Estoy tratando de descubrir cómo activar una acción solo después de que observeSingleEvent en Firebase haya terminado su trabajo.

La razón detrás es que necesito hacer las siguientes operaciones:

Según una entrada del usuario, necesito obtener algunos datos de la base de datosCuando estos datos se descargan por completo, necesito procesarlos un poco y usarlos para recuperar otros datos que se mostrarán al usuario

Actualmente estoy usando este código:

    let listOfTags = [String]()
    var outputArray = [String]()

    if listOfTags.count != 0 {
        for tag in listOfTags {

            ref.child("tags").child(tag).observeSingleEvent(of: .value, with: { (snapshot) in

                if let temp = snapshot.children.allObjects as? [FIRDataSnapshot] {
                    for elem in temp {
                        outputArray.append(elem.key)
                    }
                }

                // ...
            }) { (error) in
                print(error.localizedDescription)
            }
        }

        // HERE I WANT TO DO AN ACTION "ONLY" AFTER THE FOR LOOP IS
        // COMPLETED AND THE "outputArray" IS FILLED WITH ALL VALUES
        doSomethingHere()

    }

Pero noté que la función doSomethingHere () se ejecuta inmediatamente cuando el outputArray todavía está VACÍO. Entonces no hace nada.

Entonces mi pregunta es, ¿cómo puedo estructurar el programa de modo que esta función se ejecute después de que se complete el proceso de descarga? ¿Quizás observeSingleEvent no es el método correcto de Firebase que se utilizará? Para este caso específico, no quiero observar ningún cambio (porque esta lista no cambia con tanta frecuencia), solo necesito descargar datos y hacer algo más con estos datos más adelante.

Respuestas a la pregunta(1)

Su respuesta a la pregunta