失敗のあるイニシャライザとは ????
失敗のあるイニシャライザとは、引数が誤っていたり、データの形式が間違っていたりした場合、
インスタンスの代わりにnilを返すことによって以上を知らせる機能のことです。
通常のinitに?をつけて記述します。
例えば、構造体Humanで、nameプロパティに長さが5以上の引数が入力された場合、イニシャライザを失敗させてみましょう。
失敗のあるイニシャライザの定義
init.playground
struct Human {
var name: String!
init?(_ name: String) {
guard name.count < 5 else {
print("イニシャライズ 失敗")
return nil
}
self.name = name
print("イニシャライズ 成功")
}
}
initのあとに?がついているのがわかります。
そのあと、「nameの長さが5以上」のときに、return nilしていることがわかり、これこそがイニシャライザの失敗が実装されている部分です。
逆に、「nameの長さが5未満」のときは、self.name = nameで、適切にプロパティに初期値が格納されます。
インスタンス化
では実際にインスタンス化してみましょう
let human1 = Human("hogehoge")
print(human)
// >>イニシャライズ 失敗
// >>nil
この例だと引数nameに5文字以上の値が入力されるため、guard文に引っかかり失敗します。
let human1 = Human("ken")
print(human)
// >>イニシャライズ 成功
// >>Optional(__lldb_expr_21.Humans(name: Optional("ken")))
この例だと引数nameに5文字未満の値が入力されるため、適切に初期化されます。これが失敗のあるイニシャライザの機能でした!
余談:詳細swiftって本読みやすくて面白いですよ