LoginSignup
10
11

More than 5 years have passed since last update.

Wantedly Swift社内勉強会(Designated Initializer,Convenience Initializerと@objc Attribute)

Last updated at Posted at 2016-06-01

目次

  • 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
    }
}

参考記事
ざっくり日本語版

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11