メソッドの引数がオプショナルの場合
AとBを受けとりA+Bをして返すメソッドを考えます。
メソッドの定義自体はA?とB?となっており、nil
が入って来る可能性があるので
どちらかの引数にnilが入ってきた場合はエラーとして呼び出し元に返してやる必要性がある。
ここでXcodeの補完機能に流れを任せビルドしてしまうと強制アンラップが発生してしまい
アプリが落ちてしまうことになる。
落ちてしまう例
func hoge(A: Int?, B: Int?) -> Int? {
return A! + B!
}
上記の書き方だとreturn A! + B!
でnil
が入っていた場合に落ちてしまいます。
落ちない例
nil
が入ってきた場合にguard let
で早期にエラーとしてnil
をreturn
します。
よくその変数を使うタイミングでnil
チェックをしている人がいる。アホくさ。
func hoge(A: Int?, B: Int?) -> Int? {
guard let _A = A else { return nil }
guard let _B = B else { return nil }
return _A + _B
}
まとめ
nil
は早期にチェックするべき!!!