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でないことは仕組み側で保証されているので、こういった限られたケースでは便利そうです。