この投稿は何?
Swiftの構造体について、自動的に提供される2種類のイニシャライザを解説します。
Swiftを基礎から学ぶには
自著、工学社より発売中の「まるごと分かるSwiftプログラミング」をお勧めします。変数、関数、フロー制御構文、データ構造はもちろん、構造体からクロージャ、エクステンション、プロトコル、クロージャまでを基礎からわかりやすく解説しています。
また、Swiftプログラミングを基礎から動画で学びたい方には、Udemyコース「今日からはじめるプログラミング」をお勧めします。
実行環境
- macOS Sonoma 14.1.1
- Xcode 15.0.1
- Swift 5.9
標準イニシャライザとメンバーワイズイニシャライザ
イニシャライザは、構造体のインスタンスを作成するため初期化を行う特別なメソッドです。
インスタンスの初期化手続きでは、型に定義されたすべてのプロパティに値が設定しておく必要があります。
Swiftのコンパイラは、構造体に2種類のイニシャライザを自動的に提供します。
標準イニシャライザとメンバーワイズイニシャライザです。
標準イニシャライザ
コンパイラは「すべてのプロパティに既定値が設定されている構造体」に対して、自動的に標準イニシャライザを提供します。
標準イニシャライザは、型名の後に括弧()
があるだけのシンプルな形式です。
以下に定義するSomeType
型は、すべてのプロパティに既定値が設定されています。
したがって、標準イニシャライザが自動的に提供されます。
struct SomeType {
var number = 123
var alphabet = "ABC"
}
SomeType()
メンバーワイズイニシャライザ
構造体に「既定値が設定されていないプロパティ」がひとつでもあると標準イニシャライザは提供されなくなり、その代わりにメンバーワイズイニシャライザが提供されます。
メンバーワイズイニシャライザは、呼び出し時にすべてのプロパティに値を設定できます。
struct AnotherType {
var number: Int
var alphabet = "ABC"
}
AnotherType(number: 123, alphabet: "XYZ")
AnotherType() // error; standard initializers are no longer provided.
メンバーワイズイニシャライザが提供される場合、標準イニシャライザを呼び出すことはできなくなります。標準イニシャライザでは初期化を完了できないからです。
なお、型の定義で既定値が設定されているプロパティに関しては、メンバーワイズイニシャライザの呼び出し時に値の指定を省略できます。
AnotherType(number: 123)
実際のところ、標準イニシャライザが提供される場合はメンバーワイズイニシャライザも呼び出すことができます。
SomeType(number: 456, alphabet: "EFG")
SomeType(number: 789)
SomeType(alphabet: "XYZ")