&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」と同じ。