В моем приложении есть сценарий, в котором мне нужно переключить дизайн темы пользовательского интерфейса в зависимости от типа пользователя. Например: в моем пользовательском потоке Type1 он выглядит как Registration Screen -> HomePage Screen
, а в моем пользовательском Type 2 он должен выглядеть как Registration Screen-> Contact Screen -> Home Page Screen
. И дизайн пользовательского интерфейса и темы отличаются в случае пользователя типа 2. Для этого ниже приведен пример потока кода, который реализован в настоящее время.
RegistrationViewController
(Этот вид доступен для обоих пользователей, но тема пользовательского интерфейса отличается, например, цвет панели навигации, цвет bg, цвет кнопок, шрифты, изображения и т. Д.)
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
}
private func setupViews(){
if Utilities.isUserType1{
setupViewsForType1User() //Adds themes for type 1 user
} else {
setupViewsForType2User() //Adds themes for type 2 user
}
}
@IBAction func continueAction(_ sender: Any) {
if Utilities.isUserType1{
goToContactView() //Goes to ContactViewController
} else {
gotToHomeView() //Goes to HomeViewController
}
}
ContactViewController (это представление доступно только для пользователей типа 1)
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
}
private func setupViews(){
//Setupviews
}
@IBAction func continueAction(_ sender: Any) {
gotToHomeView()
}
HomeViewController (это представление доступно для обоих пользователей, но тема пользовательского интерфейса отличается, как указано в разделе «Регистрация»)
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
}
private func setupViews(){
if Utilities.isUserType1{
setupViewsForType1User()
} else {
setupViewsForType2User()
}
}
Это работает нормально, но проблема в том, что теперь я определил isUserType
в Utilities, и он не идеально масштабируется. Для каждого изменения потока и пользовательского интерфейса мне нужно поставить условие if-else на основе этого параметра. Итак, теперь, если у меня есть другой тип пользователя, который нужно добавить в будущем, мне снова понадобится еще один оператор if-else и переключить пользовательский интерфейс и поток на основе этого.
Есть ли лучший подход к решению этой проблемы?