Swift / Как использовать dispatch_group с несколькими вызываемыми веб-сервисами?

я используюdispatch_group вызывать функции запроса Firebase и получать уведомление после завершения запроса, чтобы иметь возможность работать с результатом. В этом сценарии я просто поместил заявление для печати.

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()
   })   
}

Этот код работает нормально.Проблема в что во время выполнения данные будут добавлены в базу данных Firebase. Вот почему я должен использоватьobserveEventType вместоobserveSingleEventOfType.

Это означает, что во время выполнения есть наблюдатель, и в случае, если данные были добавлены в базу данных, блок внутриmyFirebaseFunction будет вызван снова.

Как только это происходит, приложение вылетает, потому чтоdispatch_group_leave(group) был вызван безdispatch_group_enter(group), Пока я понял это правильно.

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

Если я изменю это наobserveSingleEventOfType, не происходит сбоев, но новые добавленные данные в Firebase не будут наблюдаться.

Какую практику лучше всего использоватьdispatch_group с несколькими запусками веб-сервисов? Или что мне нужно сделать, чтобы исправить мою проблему? Помощь очень ценится.

PS В настоящее время я использую Swift 2.3, но планируется обновление до Swift 3, поэтому было бы очень здорово получить ответ, способный на оба.

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

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