&tag(Swift/Optional);
*目次 [#c489e9f7]
#contents
*関連ページ [#n48e1ab9]
*参考情報 [#c9832961]
-[[[Swift] Optional 型についてのまとめ Ver2 - Qiita:http://qiita.com/cotrpepe/items/518c4476ca957a42f5f1]]


*概要 [#n3ae9f27]
*基本 [#n3ae9f27]
-Swiftではnilを設定できない型と設定でる型を区別する
-nilを設定できない型を通常の型、nilを設定できる型をOptional型とする。
#pre{{
var a: Int? // Optional 型
var b: Int  // 非 optional 型

a = nil     // -> OK
b = nil    // コンパイルエラー
}}
-Optional型の初期値はnilとなる。
-Optional型変数は直接扱えない。アンラップする必要がある。
--Forced Unwrapping: "!"を使う。nilをアンラップするとランタイムエラーが発生

*Optional型変数の使用方法 [#xe14a117]
Optional型変数は直接扱えない。アンラップする必要がある。

-Forced Unwrapping: "!"を使う。nilをアンラップするとランタイムエラーが発生
#pre{{
var person:Person? = nil
person!.info() //=> error
}}
--Optional Chaining: "?"を使う。このとき戻り値がOptional型になることに注意。
-Optional Chaining: "?"を使う。このとき戻り値がOptional型になることに注意。
#pre{{
var person:Person? = nil
person?.info() //=> ni.
}}
-Optional Binding: ifやwhileの条件式でアンラップ。
#pre{{
var person:Person? = nil
if let person = person {
  person.info()
}
}}
-比較演算子でアンラップ
#pre{{
var value:Int? = 9
value == 9
}}

*Implicitly Unwrapped Optional 型 [#t8ffa3c6]
-自動的にアンラップされるOptionalがた
#pre{{
var a: Int!
a.foo() //=>自動的にアンラップできるが、nilが入っているとランタイムエラー。
}}

**?? 演算子 [#y3a0ac77]
-「a ?? b」a!がnilでなければa!を返す。aがnilならばbを返す。「a != nil ? a! : b」と同じ。



トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS