optionalをunwrap

optionalを定義したら使うときはきっちりunwrapする必要があります。

定義は

 let text: String? = "hello"

と?をつければOKですが、unwrapには複数の方法があるようです。

optional chaining

text?.uppercased()
としたときに、うっかりtextがnilでもuppercased()は実行されないようです。

アプリが落ちにくくなるという最低限の安全策にはなりそうですが、エラー処理はきっちり行いたいですね。

forced unwrapping

text!というふうに!をつけると強制的にunwrapできます。
が、nilでないことを保証するためoptionalを使っているわけで、思想的には極力使用を避けたいところ。

optional binding

if let str = text {
    ...
}
とするとunwrapした結果nilでない場合のみifのスコープが実行されます。

guard構文もそうですが、optionalは?や!でunwrapのイメージが強いので、間違ってつけないように気をつける必要があります。
間違ってもコンパイルエラーになるので気づきますが。

simplicity unwrapped optional

 let text: String! = "hello"

と?の代わりに!をつけるだけ。
textと書くだけで自動的に強制unrwapされます。
(要するに明示的なunwrapのシンタックスシュガー。)

当然nilに触っちゃう可能性があるので多用は厳禁、というか基本的に使いたくないですね。
使いどころとしてはXcodeが生成するIBOutlet。
UIパーツにアクセスするのに毎回unwrapは面倒&nilでないことは仕組み側で保証されているので、こういった限られたケースでは便利そうです。

0 件のコメント:

コメントを投稿

Touchdown 1.3公開!

Touchdown 1.3を公開しました。 ダウンロードは こちら から。 Ver.1.3の変更点は以下の通りです。 新機能 macOS Mojave 10.13以降に対応 ダークモードに対応 ぜひお試しください。