イニシャライズ(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つの紹介でした!
何か間違いがあったらご指摘お願いします。
初期化するときは必ず必要になるコードですので覚えておきましょう!