非常に多くの UI コントロールを持つ iOS アプリに VC があります。特定の状態にあるときに、これらのコントロールの一部を置き換えるか、「モック」する必要があります。ボタン操作を無効にするだけの場合もあれば、発生する操作をまったく別のものに置き換える必要がある場合もあります。
この種のチェックがコードベースのいたるところに散らばっているという考えはあまり好きではありません。
if condition {
...Special/disabled functionality
} else {
...Normal functionality
}
Android では、各 Fragment/Activity をサブクラス化し、そこに機能を構築してから、Fragment の挿入時またはアクティビティの起動時に if/else を実行できます。
しかし、Storyboards/IBActions と Segues を備えた iOS では、UI と VC は非常に緊密に結合されています。UI ビューを複製するか、すでに大規模な 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()
}
}
}