extensionで拡張する
一つのclassでいくつも継承すると、コードを読む時にどこで拡張機能を使用しているのか分かりにくい。
そこで、継承が必要な処理ごとにextensionでclassを拡張し、処理を分けることで
どの処理が準拠しているのかを分かりやすくする
class HogeViewController: UIViewController {
~~~
}
extension HogeViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
textFieldShouldReturn
はUITextFieldDelegateを継承しないと使えないので
今回はextensionでHogeViewControllerを拡張し、そこで継承が必要な処理をまとめている
もちろん、class宣言時にまとめて
class HogeViewController: UIViewController, UITextFieldDelegate {
~~~~~
}
って書いても問題はない
でも、継承するもので処理を分けた方がコードを読む時に分かりやすいのでextensionで拡張する方がいい。
(例の状態だとピンとこないかもしれないが、継承先が3個以上とかになった場合に、どの処理で何から継承したメソッドを使っているのかが分かりづらくなる。)
注意点
拡張したHogeViewControllerの方でUITextFieldDelegateを継承していれば、
元のclassの方のHogeViewControllerでもUITextFieldDelegateに準拠したメソッドを使うことができる。
class HogeViewController: UIViewController {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
extension HogeViewController: UITextFieldDelegate {
}
その為、本来継承が必要な処理をextensionではなく元のclassの方で使用していても、問題なく動作してしまう。そうすると逆に可読性が下がるかもしれないので注意が必要