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それらのクラスのそれぞれで実装しているプロトコルです。ですから、質問とあなたの答えの間には少しの不一致があります。