狠狠撸

狠狠撸Share a Scribd company logo
翱辫迟颈辞苍补濒で苍颈濒と戦う
第2回Swift勉強会@Reraku
磯貝悠太
Optional とは?
Optional とは?
? nil と任意の型を格納できる型
? T? で宣言
Optional とは?
? “T?” は “Optional<T>” のシンタックスシュ
ガー
? 通常の型を、nil 値を許容するようにラップ
4
Optional とは?
? “T” 型の変数に、”T?” 型の変数は代入できな
い
? “T?” 型に対しては、”T” 型のメソッドを呼び
出せない
? → アンラップが必要
アンラップの方法
アンラップの方法
? Forced unwrapping
? Optional chaining
? Optional binding
? 比較演算子
Forced Unwrapping
? 変数の後ろに “!” をつける
? Implicitly Unwrapped Optional 宣言時の ”!” とは
別モノ
? もし nil が格納されていたら、Runtime Error
Optional chaining
? アンラップした変数のメソッドを使用できる。変数の後
ろに”?”をつける
? Optional 宣言時の “?” とは別モノ
? もし nil が格納されていたら、メソッドは実行されず、nil
が返る(→ 返るのは Optional 型)
Optional chaining
Optional Binding
? if 文の条件式内で、nil チェックと同時にアン
ラップ
比較演算子
? 比較演算子を使うと、自動的にアンラップさ
れる
おまけ: ??演算子
? 変数が nil の場合、既定値が代入される
おまけ:
Implicitly Unwrapped Optional
? nil と任意の型を格納できる型
? “T!” または “ImplicitlyUnwrappedOptional<T>” で宣
言
? 代入時、メソッドの呼び出し時に、暗黙的に Forced
Unwrapping される
? 明示的にアンラップすることもできる
Optional の理想と現実
Optional の理想
? nil にメッセージを送って予期せぬところで崩
壊したりしない
? Optional Value であることを明示でき、静的
解析に対応
? 堅牢なコード!!!
Optional の現実
? Cocoa / Cocoa Touch フレームワークは
Objective-C で書かれている
? 返り値が T! で宣言されていても、余裕で nil
が入ってくる?T?で返せばいいのに……
? → T! でも必要に応じてアンラップ
まとめ
まとめ
? Optional で nil を厳密に管理できる
? アンラップで nil でないことが保証される
? Cocoa Touch は nil まみれ
? 適切にアンラップして nil と戦おう
ご清聴ありがとうございました

More Related Content

翱辫迟颈辞苍补濒で苍颈濒と戦う