2つのクラスDog
と、Cat
両方がAnimal
プロトコルに準拠している(Swiftプログラミング言語に関しては、Java / C#のインターフェースになる)と考えてください。
犬と猫の混合リストを表示する画面があります。Interactor
舞台裏のロジックを処理するクラスがあります。
ここで、ユーザーが猫を削除するときに確認アラートを表示します。ただし、犬はアラートなしですぐに削除する必要があります。条件付きのメソッドは次のようになります。
func tryToDeleteModel(model: Animal) {
if let model = model as? Cat {
tellSceneToShowConfirmationAlert()
} else if let model = model as? Dog {
deleteModel(model: model)
}
}
このコードはどのようにリファクタリングできますか?それは明らかににおいがする
Dog
とCat
しながら、クラスとして記述されているAnimal
それらのクラスのそれぞれで実装しているプロトコルです。ですから、質問とあなたの答えの間には少しの不一致があります。