DispatchGroup notify () не вызывается - PullRequest
0 голосов
/ 03 декабря 2018

Мне нужно дождаться завершения, пока пользователь не нажмет кнопку «Попробовать снова», чтобы снова вызвать ту же функцию.В первый раз все работает нормально, но когда я нажимаю его снова, метод notfy() не вызывается.Вот класс игровой площадки для имитации этого сценария:

import Foundation

class TokenManager{
    private var alertAlreadyShown = false
    static let shared = TokenManager()
    var alreadyEnterGroup = false
    let handlerTryAgainGroup = DispatchGroup()

    func showRefreshAlert(onTryAgainPressed : @escaping()->Void){
        //PREVENTS TO ENTER ON GROUP MUTIPLE TIMES (ASYNC CALLS)
        if(!alreadyEnterGroup){
            alreadyEnterGroup = true
            self.handlerTryAgainGroup.enter()
        }
        //PREVENTS TO SHOW ALERT MUTIPLE TIMES (ASYNC CALLS)
        if(!alertAlreadyShown){
            alertAlreadyShown = true
           //NOTIFY THE COMPLETION THAT USER TOUCH TRY AGAIN BUTTON
            handlerTryAgainGroup.notify(queue: DispatchQueue.main) {
                onTryAgainPressed()
            }
        }else{
            //THIS IS JUST A TEST TO SIMULATE THE USER TAPS MUTIPLE TIMES ON BUTTON
            TokenManager.shared.tryAgainPressed()
        }

    }

    func tryAgainPressed() {
        alreadyEnterGroup = false
        handlerTryAgainGroup.leave()
    }
}

func showAlert(){
    TokenManager.shared.showRefreshAlert {
        //CALLS THE SAME FUNCTION IF THE USER TAPS TRY AGAIN
         showAlert()
     }
}

//SHOW THE ALERT AND PRESS TRY AGAIN FOR THE FIRST TIME
showAlert()
TokenManager.shared.tryAgainPressed()

Что не так в этом случае?

...