Я бы посоветовал, поскольку вы хотите динамически изменять тему NavigationBar (например, цвет фона) на основе значения модели флага, а не go для способа AppDelegate, поскольку это сделает это один раз для вас, и это считается более глобальным способом установки стиля NavigationBar до того, как фактически будет создано любое представление.
Есть несколько способов применить это, например, через extension ViewController
, inheritance with base class
.., а также различные способы, которыми вы можете получить / установить значения флага для изменения цвета навигации, например, через userdefaults
, variables
... Я приведу пример, чтобы вы могли начать:
import UIKit
class ViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
currentFlag = "Canada"
}
}
class BaseViewController: UIViewController {
var currentFlag: String = "General" {
didSet {
setNavBarColor()
}
}
private let themeColorUS = UIColor(red: 0.991, green: 0.621, blue: 0.022, alpha: 1.00)
private let themeColorCanada = UIColor(red: 0.001, green: 0.686, blue: 0.000, alpha: 1.00)
private let themeColorGeneral = UIColor(red: 0.000, green: 0.954, blue: 0.969, alpha: 1.00)
override func viewDidLoad() {
super.viewDidLoad()
setNavBarColor()
}
private func setNavBarColor() {
navigationController?.navigationBar.barTintColor = getBarColor(for: currentFlag)
}
private func getBarColor(for flag: String) -> UIColor {
if flag == "US" {
return themeColorUS
} else if flag == "Canada" {
return themeColorCanada
}
return themeColorGeneral
}
}
И это означает, что мы удалили глобальный способ установки его стиля из AppDelegate
, поэтому мой didFinishLaunchingWithOptions
выглядит следующим образом:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
return true
}
Выполнение следующего кода (с установленным флагом Канада для моего ViewController) и наличием ViewController в раскадровке с root viewcontroller UINavigationController следующим образом: 
сделает приложение выглядеть так:

Рефакторинг для улучшения nts
Кроме того, вы можете сделать что-то еще, просто чтобы упростить управление кодом, флагами и цветами, организовать их в структуре, я выбрал в качестве примера enum, но вы можете сделать это может быть и другими способами, просто чтобы дать вам образец, вы могли бы сделать это следующим образом:
import UIKit
enum Flag {
case us
case canada
case general
static let `default` = Flag.general
init(rawValue: String) {
switch rawValue {
case "US":
self = .us
case "Canada":
self = .canada
case "General":
self = .general
default:
self = .default
}
}
var themeColor: UIColor {
switch self {
case .us:
return UIColor(red: 0.001, green: 0.686, blue: 0.000, alpha: 1.00)
case .canada:
return UIColor(red: 0.001, green: 0.686, blue: 0.000, alpha: 1.00)
case .general:
return UIColor(red: 0.000, green: 0.954, blue: 0.969, alpha: 1.00)
}
}
}
class ViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
currentFlag = .canada
}
}
class BaseViewController: UIViewController {
var currentFlag: Flag = .default {
didSet {
setNavBarColor()
}
}
override func viewDidLoad() {
super.viewDidLoad()
setNavBarColor()
}
private func setNavBarColor() {
navigationController?.navigationBar.barTintColor = currentFlag.themeColor
}
}