クラスと構造体は、そのクラスまたは構造体のインスタンスが生成されるまでに、ストアドプロパティのすべてに適切な初期値を設定する必要があります。ストアドプロパティを不確定な状態にしておくことはできません。

イニシャライザ内でストアドプロパティに初期値を設定するか、プロパティの定義の一部としてデフォルトのプロパティ値を代入してストアドプロパティに初期値を設定することができます。

NOTE
ストアドプロパティに初期値を代入するか、またはイニシャライザ内でその初期値を設定するとき、プロパティオブザーバを呼び出すことなく、そのプロパティの値が直接設定されます。

イニシャライザ

イニシャライザは、特定の型の新しいインスタンスを生成するために呼び出されます。一番シンプルなイニシャライザは、パラメータが無いインスタンスメソッドと同じようになり、init キーワードで記述します。

init() {
    // 初期化処理を実行
}

次の例では、華氏での温度を保管する新しい構造体 Fahrenheit を定義しています。構造体 Fahrenheit には、Double 型のストアドプロパティ temperature があります。

struct Fahrenheit {
    var temperature: Double
    init() {
        temperature = 32.0
    }
}
var f = Fahrenheit()
print("The default temperature is \(f.temperature)° Fahrenheit")
// "The default temperature is 32.0° Fahrenheit" と出力

この構造体では、パラメータが無いイニシャライザ init を定義していて、値 32.0(華氏温度で水の氷点)で温度を初期化しています。

デフォルトのプロパティ値

上で見たように、イニシャライザ内からストアドプロパティの初期値を設定することができます。あるいは、プロパティの宣言の一部として、デフォルトのプロパティ値を指定します。定義されるときにプロパティに初期値を代入して、デフォルトのプロパティ値を指定します。

NOTE
プロパティが常に同じ初期値を取る場合には、イニシャライザ内で値を設定するのではなく、デフォルト値にします。結果は同じですが、デフォルト値がプロパティの初期化と、その宣言をより密接な関係にします。より短く明確な初期化処理になり、デフォルト値からプロパティの型を推論できるようになります。また、デフォルト値がデフォルトのイニシャライザとイニシャライザの継承を利用しやすくします。

プロパティが宣言されるところで temperature プロパティにデフォルト値を定義して、構造体 Fahrenheit をよりシンプルに記述することができます。

struct Fahrenheit {
    var temperature = 32.0
}

Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.