最終更新:2017-05-29 (月) 03:30:23 (2517d)  

Swift/オプショナル型
Top / Swift / オプショナル型

?

オプショナルを指定するとそのプロパティはnilの代入が許容される

オプショナル型

  • 型名に?をつける
    var 変数名:型名?

正確な表現

  • 下記は同等
    var str? = "test"
    var str:Optional<String> = "test"

アンラップ

  • Optional<T>をT型に変換すること
  • オプショナル型なのでメソッドや値の操作はできない
  • 一時的に元の型として使うときはアンラップ(!)する
    var msg:String? = "world"
    var str = "Hello " + msg!

初期値の設定 (??)

  • オプショナル型がnilの場合に初期値を設定
    var count:Int?
    var price = 150 * (count ?? 2)

オプショナル型

  • 型名に?をつける
    var 変数名:型名?

状態

  • 「 有効なデータがある」
  • 「 データをあえて設定しない」
  • 「 データが管理されておらず、 読み出してはいけない無効 状態」
  • 値にアクセスする前にnilチェックしてアンラップ(!)して値を取り出す

nilチェック

  • if オプショナル変数 != nil
  • if オプショナル変数 == 500
    • 比較はアンラップせずに可能

オプショナルバインディング

  • オプショナル型がnilでなければ値をアンラップして一時変数に代入し、nilの場合はfalseを返す
    //varでも可
    if let 定数 =オプショナル型{
       //値がある
      print("\(定数)")
    }else{
      //nilだった
    }

オプショナルチェイニング

  • オブジェクトのプロパティ・メソッド・サブスクリプトなどにドットシンタックスでアクセスする時に、?をつけることで値がnilだった場合の実行時エラーを回避
  • オプショナル型のところの変数に?をつける
    a?.b?.c()

有値オプショナル? - !

  • var 変数名:型名!
  • 値の参照時に自動的にアンラップが行われる
  • nilチェックを必要としない記述が可能
  • 参照されるまでに有効な値を設定する
  • var p:Int!
    • デフォルトでnil
  • 内容がnilのときにアクセスするとプログラムが異常終了

メモ

  • 有効な値が設定されていない時はnil
  • 変数に有値オプショナル型を代入するとオプショナル型になる

メモ

  • ラップ/アンラップ

メモ

  • Swift 3以前では有値オプショナル型はImplicityUnwrappedOptional?として定義されていたが廃止された

関連