Не показывается алерт с ошибкой

Реальное поведение:
При отсутствии соединения с интернетом не отображается Alert с описанием ошибки.

Ожидаемое поведение:
При получении ошибки в сетевом запросе в SplashViewController нужно показать UIAlertController:

  • с заголовком «Что-то пошло не так(»,
  • подписью «Не удалось войти в систему»
  • кнопкой «Ок» для скрытия алерта.

Код:

import Foundation
import UIKit
import ProgressHUD

final class SplashViewController: UIViewController {
    
    private let showAuthScreenId = "ShowAuthenticationScreen"
    private let profileService = ProfileService.shared
    private var blockingProgressHUD = UIBlockingProgressHUD()
    private var logoView: UIImageView?
        
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.view.backgroundColor = UIColor(named: "YP Black")
        createLogoView()
        if OAuth2TokenStorage().token != nil {
            fetchProfile(OAuth2TokenStorage().token!)
        } else {
            let storyboard = UIStoryboard(name: "Main", bundle: .main)
            let viewController = storyboard.instantiateViewController(withIdentifier: "AuthViewController") as! AuthViewController
            viewController.delegate = self
            viewController.modalPresentationStyle = .fullScreen
            self.present(viewController, animated: true)
        }
    }
        
    private func switchToTabBarController() {
        guard let window = UIApplication.shared.windows.first else {
            fatalError("Invalid Configuration")
        }
        let tabBarController = UIStoryboard(
            name: "Main",
            bundle: .main
        ).instantiateViewController(withIdentifier: "TabBarViewController")
        window.rootViewController = tabBarController
    }
    
    private func createLogoView() {
        let logoView = UIImageView(image: UIImage(named: "splash_screen_logo"))
        logoView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(logoView)
        logoView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        logoView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    }
}

extension SplashViewController: AuthViewControllerDelegate {
    
    private func fetchOAuthToken(_ code: String) {
        OAuth2Service.shared.fetchOAuthToken(code) { [weak self] result in
            guard let self = self else { return }
            DispatchQueue.main.async {
                switch result {
                case .success(let token):
                    self.fetchProfile(token)
                    UIBlockingProgressHUD.show()
                case .failure(let error):
                    UIBlockingProgressHUD.show()
                    print("Token not received \(error)")
                    self.showAlert(parameter: code, .tokenProblem)
                    break
                }
            }
        }
    }
    
    private func fetchProfile(_ token: String) {
        profileService.fetchProfile(token) { [weak self] result in
            guard let self = self else { return }
            DispatchQueue.main.async {
                switch result {
                case .success(let profile):
                    ProfileImageService.shared.fetchProfileImageURL(username: profile.username) { _ in}
                    UIBlockingProgressHUD.dismiss()
                    self.switchToTabBarController()
                case .failure(let error):
                    UIBlockingProgressHUD.dismiss()
                    print("Profile not received \(error)")
                    self.showAlert(parameter: token, .profileProblem)
                }
            }
        }
    }
    private func showAlert(parameter: String, _ problem: ProblemType) {
        let alert = UIAlertController(
            title: "Что-то пошло не так(",
            message: "Не удалось войти в систему",
            preferredStyle: .alert)
        let alertAction = UIAlertAction(title: "Ok", style: .default) {[weak self] _ in
            guard let self = self else { return }
            switch problem {
            case .tokenProblem: self.fetchOAuthToken(parameter)
            case .profileProblem: self.fetchProfile(parameter)
            }
        }
        alert.addAction(alertAction)
        
        let vc = self.presentedViewController ?? self
        vc.present(alert, animated: true)
        
        print("Alert shown")
    }
        
    func authViewViewController(_ vc: AuthViewController, didAuthenticateWithCode code: String) {
        UIBlockingProgressHUD.show()
        dismiss(animated: true) { [weak self] in
            guard let self = self else { return }
            self.fetchOAuthToken(code)
        }
    }
    enum ProblemType {
        case tokenProblem
        case profileProblem
    }
}
`

Ответы (0 шт):