Swiftのinit(イニシャライザ)の使い方を完全ガイド!初心者でもわかる初期化の基本
生徒
「Swiftのinitって何のために使うんですか?見たことはあるけどよく分かりません…」
先生
「initは“イニシャライザ”って呼ばれていて、オブジェクトを作るときに最初の状態を決めるための特別な関数なんです。」
生徒
「初期化っていうことですか?」
先生
「その通り!それじゃあSwiftのイニシャライザinitについて、やさしく解説していきますね。」
1. Swiftのinit(イニシャライザ)とは?
Swift(スウィフト)では、class(クラス)やstruct(構造体)を使ってデータをひとまとまりにすることができます。
そのときに「初期の値」を設定する役割を持つのがinit(イニシャライザ)です。
たとえば、人の名前や年齢をもつオブジェクトを作るとき、毎回同じ情報を設定するのは大変ですよね。initを使えば、最初から必要な情報を渡して自動的に準備できます。
2. イニシャライザの基本的な書き方
initは、クラスや構造体の中に書きます。下のように使います。
struct Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func greet() {
print("こんにちは、私は\(name)、\(age)歳です。")
}
}
let person = Person(name: "太郎", age: 20)
person.greet()
こんにちは、私は太郎、20歳です。
initの中では、selfというキーワードを使って、自分自身のプロパティに値を入れています。
このself.name = nameという書き方は、「この構造体のnameプロパティに、引数で受け取ったnameの値を代入する」という意味になります。
3. イニシャライザがない場合はどうなる?
実は、構造体(struct)の場合は、すべてのプロパティに初期値が設定されていれば、Swiftが自動でイニシャライザを用意してくれます。
struct Animal {
var type: String = "犬"
var age: Int = 3
}
let a = Animal()
print(a.type)
print(a.age)
犬
3
このように、自分でinitを書かなくても、初期値がある場合はそのまま使うことができます。
4. クラスでもinitは同じように使える
クラス(class)の場合もinitを使います。ただし、構造体と違って、すべてのプロパティに初期値があっても、自動ではinitが作られないので、自分で書くのが一般的です。
class Car {
var color: String
var speed: Int
init(color: String, speed: Int) {
self.color = color
self.speed = speed
}
func run() {
print("色が\(color)の車が時速\(speed)kmで走っています。")
}
}
let myCar = Car(color: "赤", speed: 100)
myCar.run()
色が赤の車が時速100kmで走っています。
このように、クラスでもイニシャライザを使うことで、オブジェクトを作るときに必要な情報を渡すことができます。
5. 引数の名前を省略するinitの書き方
Swiftでは、イニシャライザで引数のラベルを省略することもできます。省略したい場合は、_(アンダースコア)を使います。
struct Book {
var title: String
init(_ title: String) {
self.title = title
}
}
let book = Book("Swift入門")
print(book.title)
Swift入門
このようにすると、呼び出すときにtitle:と書かずに、値だけを渡すことができます。
6. イニシャライザの中で計算もできる
イニシャライザの中では、渡された情報を使って計算したり、条件分岐をしたりすることもできます。
struct Rectangle {
var width: Int
var height: Int
var area: Int
init(width: Int, height: Int) {
self.width = width
self.height = height
self.area = width * height
}
}
let rect = Rectangle(width: 5, height: 4)
print("面積は\(rect.area)です")
面積は20です
このように、イニシャライザの中で値を加工して新しいプロパティを作ることもできます。
7. Swiftのinitは安全で便利な機能
initを使うことで、Swiftのクラスや構造体のインスタンスを安全に、確実に初期化できます。
Swiftは型安全(がたあんぜん)な言語なので、すべてのプロパティに値が設定されていないとエラーになります。そのためinitはとても重要な仕組みです。
また、コードの見通しを良くするためにも、initを活用することでメンテナンスもしやすくなります。