概要
実務のペアプロの際に教えていただいた、viewのライフサイクルについて自分が理解できてなかったことについて、viewDidLoadに焦点を当てて記載しておきます
viewDidLoad()内の構造について
ViewControllerにコードを書く際に何気なく書いているviewDidLoad()は、
override func viewDidLoad() {
super.viewDidLoad()
//ここにやりたい処理を書く
}
という形をしています
まず、
override func viewDidLoad()
の部分についてですが、overrideをつけて宣言することで、親クラスが持っているメソッドにアクセスを行なっています。
次に、
super.viewDidLoad()
ここで書かれているsuperとは、スーパークラス(親クラス)のことです
ということは、この部分は結局何をしているのかというと、
親クラスの中のviewDidLoad()を呼び出しているという意味になります
全体をまとめると、
overrideで親クラスのメソッドにアクセスしてから、
superでアクセスした親クラスのメソッドの呼び出しを行っています
SOLID原則との関連性
さらに、このコードにはSOLID原則の中のリスコフの原則の考え方も適用されています
リスコフの原則とは、子クラスが親クラスの機能を引き継いで実現することができるというものです
継承とは、親クラスを基につくる。親クラスのプロパティやメソッドを引き継ぐと言った意味です
リスコフの置換原則を守るには、継承関係にあるクラスは振る舞いが変わらないようにする必要があります
親クラスが本来持っている振る舞いを変更してはいけないので、親クラスのメソッドであるviewDidload()にアクセスし、呼び出しを行なって、それに対して肉付けを行なっていると言ったイメージです
そうすることで、親クラス自体のメソッドを変更ぜずに、やりたい処理の実行を同じタイミングで実行できるようにしています。
補足
viewDidLoad()メソッドをはじめとするviewのライフサイクルメソッドは、
UIViewControllerを継承させている時点で持っていることになるので、特に同じタイミングでやりたいメソッドがない場合は書かなくても良いです