Swift / Como usar o dispatch_group com vários serviços da web chamados?

estou usandodispatch_group para chamar as funções de solicitação do Firebase e ser notificado assim que a solicitação for concluída para poder trabalhar com o resultado. Nesse cenário, acabei de colocar uma declaração de impressão.

func loadStuff() {
    dispatch_group_enter(group)
        myFirebaseFunction() {
             dispatch_group_leave(group)
        }

    dispatch_group_notify(group, dispatch_get_main_queue()) {
        print("done")
    }
}

func myFirebaseFunction(completionHandler: () -> ()) {

    let usersRef = firebase.child("likes")
    usersRef.observeEventType(.Value, withBlock: { snapshot in

             if snapshot.exists() {
                   let sorted = (snapshot.value!.allValues as NSArray).sortedArrayUsingDescriptors([NSSortDescriptor(key: "date",ascending: false)])

                   for item in sorted {

                       dict.append(item as! NSDictionary)
                   }
            }
            completionHandler()
   })   
}

Este código está funcionando bem.O problema é que, durante o tempo de execução, os dados serão adicionados ao banco de dados Firebase. É por isso que eu tenho que usarobserveEventType ao invés deobserveSingleEventOfType.

Isso significa que há um observador durante o tempo de execução e, caso dados tenham sido adicionados ao banco de dados, o bloco dentromyFirebaseFunction será chamado novamente.

Quando isso acontece, o aplicativo falha porquedispatch_group_leave(group) foi chamado semdispatch_group_enter(group). Contanto que eu entendi direito.

dispatch_group_enter(group)
    myFirebaseFunction() {
         dispatch_group_leave(group)      // crash here
    }

Se eu mudar paraobserveSingleEventOfType, nenhuma falha ocorre, mas novos dados adicionados ao Firebase não serão observados.

Qual é a melhor prática a ser usadadispatch_group com vários serviços Web executados? Ou o que preciso fazer para corrigir meu problema? A ajuda é muito apreciada.

PS Atualmente, estou usando o Swift 2.3, mas está planejada uma atualização para o Swift 3, por isso seria incrível receber uma resposta capaz para ambos.

questionAnswers(2)

yourAnswerToTheQuestion