概要
iOSアプリの開発をかれこれ2年以上やってますが、
未だにソースレビューやエラーで引っかかるのが、「nil」や「null」
絡みなんですよね。。
特にSwiftの場合、
unexpectedly found nil〜
といったエラーがによく引っ掛かります。
製造工程にて、nilについてどう扱えばいいのか?
最低限の知識を軽くまとめておきたいな。。
そんなことをふと思ったので簡単にまとめておきたいと思います。
optionalについて
SwiftにはOptionalという概念があります。
簡単に言えば空の値を保持できるようにした変数を指します。
この空の状態を、Swiftの場合「nil」という表現で表します。
例
// optional型
var hoge?: String? // nilとして初期化される
// 非オプショナル型
var hoge2: String
hoge = nil // OK
hoge2 = nil // ERROR
上記のように、Optional型ではない変数にnilを
代入するとERRORとなります。
あまり他の言語にはないルールじゃないですかね。。。?
注意
非Optional型にnilが代入された場合アプリが落ちます。
初心者の方でアプリが落ちた場合はまずこれが原因と疑っても問題ないくらいです。
Optional型の注意事項
じゃあ全部Optionalにしてしまえばいいと思われますが、
実は使用するにあたり注意したいことがあります。
Optionalと非Optionalは同じ操作はできない
例えばInt型とOptionalのInt型は異なる型になります。
よって同じ操作はできません。
例
var number: Int = 10
var optNum: Int? = 20
number + 10 // 20
optNum + 10 // ERROR
「10」はInt型と判断されるため、Int?型に代入すると
エラーになります。
なのでOptional型を非Optional型に変換する必要があります。
これをアンラップ(unwrap)と言います。
ではアンラップはどうすればいいか見てみます。
アンラップの例
①強制アンラップ
対象変数の最後に「!」をつける方法です。
例
var number: Int? = 10
print(number) // 実行結果:ERROR
print(number!) // 実行結果:10
シンプルな方法ですが、対象の値が「nil」の場合はエラーになります。
警告
対象のOptional型変数が「nil」の場合、
アンラップしてはいけない!
②nilチェック
①の方法を避けるべく利用されるのが、
みんな大好きnilチェックです。
単純に値がnilかどうか判断し、
処理を分岐してあげることですね!
例
var optStr: String? = "optional"
if let str = optStr {
// nil以外の場合に実施する処理
}
最後に
簡単ですがSwiftを使用する際の注意事項を
まとめました。
・nil許容せず変数を使ってたらアプリが落ちた!
・アンラップしたらエラーが出た!
などのミスで引っかかったり、レビューで突っ込まれてから気づくということが
ありがちなのでこの記事がお役に立てれば幸いです!
ちなみにObjecive-CではnilだのNULLといった違いが
また出てくるみたいですね。
時間がある時に別途記事を作成できたらと思います!
本記事を閲覧いただきありがとうございました!
何か間違いがあればご指摘いただけると幸いです。