Как сделать Асинхронный переход на другой контроллер


#1

Привет всем.
Реализовал авторизацию, но столкнулся с проблемой при переходе на другой контроллер.
Когда проходит авторизация, сразу же после этого перебрасывает на другой контроллер, где должна отображаться информация, этого не происходит, после того как возвращаюсь на главный контролер и снова перехожу в другой контроллер, информация отображается. Подскажите как реализовать асинхронный переход, чтобы пока не пройдет авторизация и не прийдет токет, не осуществлялся переход

Вот код реализации авторизации:

func GetUserInfoFromJson(login: String, password: String, completion: @escaping CompletionHandler)  {

var headers: HTTPHeaders = [:]

if let authorizationHeader = Request.authorizationHeader(user: login, password: password) {
    headers[authorizationHeader.key] = authorizationHeader.value
}

Alamofire.request(BASE_URL, headers: headers)
    .responseJSON { response in
        
         Alamofire.request(BASE_URL, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
            
             guard let data = response.data else { return }

        do {
            
            let json = try JSONDecoder().decode([LoginInfo].self, from: data)
             print(json)
            
            self.authToken = json[0].token!
             self.UserInfoAll = json[0]   
             self.isLoggedIn = true
            completion(true)

        } catch {
            print("Error")
            completion(false)
        }

        //  debugPrint(response)
}

#2

Наверное все-таки синхронный? Столкнулся с аналогичной проблемой. Решается семафорами:

let semaphore = DispatchSemaphore(value: 0)
        
let task = URLSession.shared.dataTask(with: request) { (data, urlResponse, error) in
...
semaphore.signal()
}
task.resume()
_ = semaphore.wait(timeout: .distantFuture)