目次
- Designated InitializerとConvenience Initializer
- Required Initializer
- 主要なAttributes達
Designated Initializer(指定イニシャライザ)
- クラスのイニシャライザ3: Designated Initializer と Convenience Initializerのページが非常にわかりやすい
- インスタンスの初期化が全て完了できるイニシャライザ
- convenienceというキーワードなしのイニシャライザは全て指定イニシャライザ
- どのクラスも指定イニシャライザを1つ以上持っている必要がある。
- スーパークラスの Designated Initializerを呼びださなければいけない
- 同じクラスのイニシャライザは呼び出すことができない
指定イニシャライザの中身は
1.自分自身特有のプロパティの初期化
2.スーパークラスの指定イニシャライザの呼び出し
3.自分とスーパークラスのプロパティのカスタマイズ or インスタンスメソッドの呼び出し
の順番で行う
Convenience Initializer(簡易イニシャライザ)
- 他のイニシャライザを呼び出して初期化を行うイニシャライザ
- 直接、あるいは間接的に指定イニシャライザを呼び出していなければならない
- 同じクラスの他のイニシャライザを呼び出せる
- スーパークラスのイニシャライザは呼び出せない
- convenienceというキーワードをつけて定義する
簡易イニシャライザの中身は
1.同じクラスの他のイニシャライザの呼び出し
2.自分とスーパークラスのプロパティのカスタマイズ or インスタンスメソッドの呼び出し
の順番で行う
Required Initializer(必須イニシャライザ)
- そのクラスを継承した全てのサブクラスにそのイニシャライザを実装させたい時
- プロトコルのイニシャライザをオーバーライドする時
に利用する
@objc
- @objc修飾子をつけると、Objective-Cからも利用できることを意味する
- Objective-Cで利用できない構成要素を含むことはできない(Genericsなど)
- Swiftにはプロトコルにおいてオプショナルなメソッドは存在しない
- @objc修飾子をプロトコルの定義に記述すると、メソッドの宣言に optionalを付与する事ができる
オプショナルなメソッドは、 protocol拡張を利用して実現したらいいかも
要するに
- 実装がひっすでないメソッドはデフォルトの振る舞いが決まっている
- 実装が必須であるメソッドはデフォルトの振る舞いが決まっていない
protocol AProtocol {
func requiredMethod()
func optionalMethod()
}
extension AProtocol {
func optionalMethod() {
// Default behavior
}
}