最終更新:2017-02-24 (金) 04:32:55 (1423d)  

Optional
Top / Optional

?

Optional型

  • nilが入るのを許す

非Optional型

  • nilが入るのを許さない

  • var a: Int? // Optional型
    var b: Int  // 非Optional型
    
    var c: String? // Optional型
    var d: String  // 非Optional型

シンタックスシュガー

T?

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>

参考