イニシャライザ(初期化)

Swiftにおける「イニシャライザ(initializer)」は、インスタンス生成時にプロパティの初期値を設定するための特別なメソッドです。クラス(class)および構造体(struct)の両方において使用されます。


1. イニシャライザの基本構文

swift
struct Person { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } }
  • initキーワードを使って定義します。

  • selfは現在のインスタンスを指します。

  • イニシャライザには戻り値(->)は不要です。


2. デフォルトイニシャライザ(構造体)

構造体には、すべてのプロパティがデフォルト値を持っているか、明示的に初期化子が定義されていない場合に自動生成されるイニシャライザがあります。

swift
struct Point { var x: Int = 0 var y: Int = 0 } // 以下のようにインスタンス化可能 let p = Point()

3. メンバー単位イニシャライザ(構造体)

構造体では、初期値が与えられていないプロパティに対して、自動的にメンバーごとのイニシャライザが生成されます。

swift
struct Size { var width: Double var height: Double } // 自動生成されたイニシャライザを使って let s = Size(width: 10.0, height: 20.0)

4. クラスにおけるイニシャライザ

クラスでは、イニシャライザを自分で定義しない限り、デフォルトイニシャライザは提供されません(全プロパティに初期値が必要です)。

swift
class Car { var model: String var year: Int init(model: String, year: Int) { self.model = model self.year = year } }

5. 複数のイニシャライザ(イニシャライザのオーバーロード)

構造体・クラスともに、複数の異なるイニシャライザを定義可能です。

swift
struct Rectangle { var width: Double var height: Double init(width: Double, height: Double) { self.width = width self.height = height } init(side: Double) { self.width = side self.height = side } }

6. コンビニエンスイニシャライザ(クラス専用)

クラスにおいては、convenienceキーワードを使って補助的なイニシャライザを定義できます。これは、他のイニシャライザを呼び出して初期化処理を補助する目的で使われます。

swift
class Circle { var radius: Double init(radius: Double) { self.radius = radius } convenience init(diameter: Double) { self.init(radius: diameter / 2) } }

7. 必須イニシャライザ(required)

requiredキーワードを使うと、サブクラスでそのイニシャライザのオーバーライドを強制することができます。

swift
class Animal { var name: String required init(name: String) { self.name = name } }

まとめ

種類 使用対象 特徴
デフォルトイニシャライザ 構造体 すべてのプロパティに初期値があるとき自動生成される
メンバー単位イニシャライザ 構造体 プロパティの名前を使った初期化が可能
カスタムイニシャライザ 両方 独自の初期化処理が可能
コンビニエンスイニシャライザ クラス 他のイニシャライザを補助するための補助的なイニシャライザ
必須イニシャライザ クラス 継承先で必ず実装が必要

生成日:2025/05/04