最終更新:2017-02-24 (金) 04:32:55 (2590d)
Optional
Top / Optional
Optional型
- nilが入るのを許す
非Optional型
- nilが入るのを許さない
例
var a: Int? // Optional型 var b: Int // 非Optional型 var c: String? // Optional型 var d: String // 非Optional型
シンタックスシュガー
T?
- Optional<T>のシンタックスシュガー
var a: Int? var b: Optional<Int> // Int?と同じ意味
T!
- ImplicitlyUnwrappedOptional?<T>のシンタックスシュガー
アンラッピング
Forced Unwrapping (!)
var d: Dog? = Dog() // Optional型 println(d!.bark()) // -> Wan!
Optional Chaining (?)
- 変数dにnilが入っていた場合、アンラップ時にnilが返ってくる
println(d?.bark())
Optional Binding
- if文やwhile文の条件式で宣言され、Optional型の変数を代入された変数は、非Optional型になる
var wrappedDog: Dog? = Dog() // Optional型 // if文の条件式で宣言された変数は、非Optional型になる(Optional Binding) if var unwrappedDog1 = wrappedDog { // 「!」を付ける必要はない println(unwrappedDog1.bark()) // -> Wan! }
Implicitly Unwrapped Optional型 (!)
var d: Dog! = Dog() // Implicitly Unwrapped Optional型
- 変数をImplicitly Unwrapped Optional型で宣言する際には、?ではなく、!を使う。
- ImplicitlyUnwrappedOptional?<T>