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でないことは仕組み側で保証されているので、こういった限られたケースでは便利そうです。
登録:
コメントの投稿 (Atom)
Touchdown 1.3公開!
Touchdown 1.3を公開しました。 ダウンロードは こちら から。 Ver.1.3の変更点は以下の通りです。 新機能 macOS Mojave 10.13以降に対応 ダークモードに対応 ぜひお試しください。

-
TouchdownをSwift 4に変換した際に、フレームワーク側の変更に伴うコードの置換が発生していました。 ファイルのドラッグ&ドロップに関する部分ではドラッグ受付登録が、 register(forDraggedTypes: [NSFilenamesPboard...
-
Touchdownでは複数の設定を保存して切り替えられるようにするため、NSTableViewをUIとして使います。 基本的なとこだけど、何かと分かりにくいCocoa Binding。 iOSでは使えないらしく情報も少なめなので、簡単にまとめておきます。 S...
-
macOS High SierraになりSwiftも4にバージョンアップ。 TouchdownもSwift 3からSwift 4に移行します。 基本的にはXcodeの移行ツールに従うだけで、途中で聞かれる Minimize Inference Match Swift...
0 件のコメント:
コメントを投稿