質問: Swiftで以下のように `init` に `?` が付いてる時はどういう意味ですか? また これを `!` で外す時は `guard let ... ??` でいいですか? ``` required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.copyInit() } ```
回答: > > initに?がついてるときはどういう意味 > > > 公式のSwift本でFailable Initializerと呼ばれているものです。直訳すれば「失敗する可能性のあるイニシャライザ」と言うことになりますが、初期化の途中で失敗する可能性があり、失敗した場合には結果が`nil`になると言うイニシャライザです。 > > これを!ではずす > > > 「!ではずす」と言う言い方は意味をなさないので何のことかわかりませんが、強制アンラップ(`!`)を使わずに安全に使用したい場合、guard letに代表される条件付きバインディングを用いたり、`??`演算子で`nil`の場合のデフォルト値を補ってやると言うのは、Optional型を返すメソッドと同じになります。