В приложении iOS есть венчурные капиталисты, которые имеют довольно много элементов управления пользовательским интерфейсом. Теперь мне нужно заменить или «смоделировать» некоторые из этих элементов управления, когда они находятся в определенном состоянии. В некоторых случаях это будет просто отключение действий кнопок, но в некоторых случаях выполняемые действия должны быть заменены чем-то совершенно другим.
Мне не очень нравится идея засорять подобные проверки вокруг кодовой базы.
if condition {
...Special/disabled functionality
} else {
...Normal functionality
}
В Android я могу просто создать подкласс для каждого фрагмента / действия и создать там функциональность, а затем выполнить if / else при вставке фрагментов или запуске действий.
Но на iOS с раскадровками / IBActions и Segues пользовательский интерфейс и виртуальные каналы действительно тесно связаны. Вы либо заканчиваете тем, что дублируете представления пользовательского интерфейса, либо добавляете много привередливого кода к уже большим VC.
Как лучше всего справиться с этим в iOS?
Пример кода того, чего я хочу избежать:
//Before:
class SomeViewController : UIViewController {
@IBAction onSomeButton() {
checkSomeState()
doANetworkRequest(() -> {
someCompletionHandler()
updatesTheUI()
}
updateTheUIWhileLoading()
}
@IBAction onSomeOtherButton() {
checkAnotherState()
updateUI()
}
}
//After:
class SomeViewController : UIViewController {
@IBAction onSomeButton() {
if specialState {
doSomethingSimpler()
} else {
checkSomeState()
doANetworkRequest(() -> {
someCompletionHandler()
updatesTheUI()
}
updateTheUIWhileLoading()
}
}
@IBAction onSomeOtherButton() {
if specialState {
return // Do nothing
} else {
checkAnotherState()
updateUI()
}
}
}