見出し画像

イニシャライズ(Init)について

こんばんは! りーさんです。
今回はイニシャライズ(init)について書いていこうと思います。
initにはさまざまな書き方があるのでメモ程度に残していこうと思います。

Default Initializer (既定イニシャライザ)

プロパティが存在しない場合や全てのプロパティが初期値を持っている場合、指定イニシャライザ内で初期化する必要があるプロパティがないので暗黙的にデフォルトの指定イニシャライザが定義されます。

class Memo {
    let title: String = "タイトル"
    let subTitle: String = "サブタイトル"
    let count: Int = 100
}

let memo = Memo.init()
let title = memo.title
let subTitle = memo.subTitle
let count = memo.count

print(title)
print(subTitle)
print(count)

↓ ログ出力 ↓

タイトル
サブタイトル
100

Designated Initializer (指定イニシャライザ)

イニシャライズの中で全てのストアドプロパティが初期化される必要があります。


class Memo {
    let title: String
    let subTitle: String
    let count: Int
    
    init(title: String, subTitle: String, count: Int) {
        self.title = title
        self.subTitle = subTitle
        self.count = count
    }
}

let memo = Memo.init(title: "タイトル", subTitle: "サブタイトル", count: 100)
let title = memo.title
let subTitle = memo.subTitle
let count = memo.count


print(title)
print(subTitle)
print(count)

↓ ログ出力 ↓
タイトル
サブタイトル
100

Convenience Initializer (便宜イニシャライザ)

指定イニシャライザを中継するイニシャライザで内部で引数を組み立てて指定イニシャライザを呼び出す必要があります。


class Memo {
    var title: String
    var subTitle: String
    var count: Int
    
    init(title: String, subTitle: String, count: Int) {
        self.title = title
        self.subTitle = subTitle
        self.count = count
    }
    
    convenience init(title: String, count: Int) {
        self.init(title: title, subTitle: "こんにちは!", count: count)
    }
}



let memo = Memo.init(title: "タイトル", subTitle: "サブタイトル", count: 100)
let title = memo.title
let subTitle = memo.subTitle
let count = memo.count

let memo2 = Memo.init(title: "タイトル2", count: 200)
let title2 = memo2.title
let subTitle2 = memo2.subTitle
let count2 = memo2.count


print(title)
print(subTitle)
print(count)

print(title2)
print(subTitle2)
print(count2)

↓ ログ出力 ↓
タイトル
サブタイトル
100

タイトル2
こんにちは!
200


他にも種類があるかもですが以上3つの紹介でした!
何か間違いがあったらご指摘お願いします。

初期化するときは必ず必要になるコードですので覚えておきましょう!

いいなと思ったら応援しよう!