Open9
オプショナルについて
最近業務でオプショナルの取り扱いがうまくいっていない理由でクラッシュすることが何度かありました。
僕自身まだまだ知見が浅いので、勉強しながらまとめていきたいと思います。
Swiftにおけるnilの取り扱い
- Swiftではnilの概念があり、これを厳密に取り扱っている
- nilに対して適切な処理をしないとエラーが起こり、アプリがクラッシュしてしまう
Optional Type
とはいえ、APIを取得する時とか、頻繁にnilは取り扱っている。
具体的にnilを取り扱う事例はこんなとき。
- 値が存在しないかもしれないとき
- Simple domain errorが発生するかもしれないとき
nilが入っているかどうかを安全にチェックする
struct Person{
var birthday: Date?
}
if person = Person()
if let person: Date = person.birthday { //birthdayに値がある場合
print(birthday)
} else { //nilの場合
print("nil")
}
アンラップ
Optinonal型で定義されているものは、通常の文字列としては扱われません。
なので、Optionalを外して正常な値を取り出す必要があります。
これをアンラップという。
アンラップを行う一例
var str: String? = "Hello, world"
if let str = str {
print(str)
}
強制アンラップ
強制アンラップとは、つまりOptinoalの値を強制的に変換することです。
「!」を用いて、こんな形で書きます。
let value: Int = Int(textfield.text)!
こうすれば、強制的にInteger型にアンラップされます。
これは諸刃の剣みたいなもので、必ず数字に変換できるものが入っていることを確認できていなければ、クラッシュしてしまいます。
その代わり、短く効率的に書くことができるので、慎重に検討して使いましょう。
nilの操作・アクセスを減らすには
- Optinoalの値は早急に安全に取り出しましょう!
- 「『!』はnilではない」と確証がある時のみ使いましょう!
参考文献
現場のためのSwift4