1. イニシャライザとは
- __イニシャライザ__とは、クラスの初期設定を実行するメソッドのこと。
- クラスの初期設定とは、「自身のプロパティに初期値を設定すること」。
- クラスによっては初期化が必須の場合がある。初期化が必要なクラスについては、インスタンスを生成するタイミングで初期値を設定することが義務付けられており、それを実現するのが__イニシャライザ__。
架空のIPhoneクラスの宣言
class IPhone {
var language:String
var passcode:String
// イニシャライザ
init(language:String, passcode:String) {
self.language = language
self.passcode = passcode
}
}
2. イニシャライザの宣言
イニシャライザ宣言の型
init(<ラベル1> <引数名1>:<型>, <ラベル2> <引数名2>:<型>…) {
<文>
}
イニシャライザ宣言の例
// イニシャライザ
init(language:String, passcode:String) {
self.language = language
self.passcode = passcode
}
- イニシャライザ書き方はメソッドと似ているが、「メソッド名」にあたる識別子の記述はない。
- 引数名がない場合は、空の()を書く。{}の中には、初期値を設定するためのコードを記述する。
3. イニシャライザの呼び出し
イニシャライザを間接的に呼び出す書式
var <変数名> = <クラス名>(<ラベル1>:<引数>, <ラベル2>:<引数>)
IPhoneクラスのインスタンスの生成とイニシャライザの呼び出し
var iPhone = IPhone(language:"日本語", passcode:"0123")
- イニシャライザは、通常のメソッドのように直接呼び出すことはできない。
- イニシャライザは、インスタンスを生成する書式の中で間接的に呼び出される。
- 上記のように書くと、IPhoneクラス内のイニシャライザが呼び出されて、languageプロパティと、passcodeプロパティに初期値が代入される。
- 今回のIPhoneクラスの宣言ではラベルを書かなかったが、「メソッドの宣言時にラベルを省略した場合は引数名と同じになる」というルールがあるので、上記のように呼び出し時にはラベルを指定できる。
3. デフォルトイニシャライザ
-
クラス名()
のように引数は指定せずにインスタンスを生成すると、引数が一つもない「init()
」というイニシャライザが自動的に呼び出される。 - このイニシャライザは、__クラス内の全てのプロパティに初期値が設定されている場合__に、Swiftが自動的に作ってくれるもの。
- => このイニシャライザのことを、__デフォルトイニシャライザ__という。
デフォルトイニシャライザの例
class IPhone {
var language = "日本語"
var passcode = "0123"
}
var IPhone = IPhone()
上記のようになっている場合はinit(){}
を書く必要はなく、インスタンス生成時に引数の指定も不要。
■デフォルトイニシャライザの重要なポイント
「全てのプロパティに初期化が設定されている場合、Swiftが自動的にinit(){}を追加してくれる」。