LoginSignup
0
1

More than 5 years have passed since last update.

[Swift]Optional<Wrapped>周りのメモ

Last updated at Posted at 2017-03-30

非オプショナル型

// 何もついてない場合は、非オプショナル型
let nonOptional: Int = 1
// type(of)で型名を調べてみると
type(of: nonOptional) //-> Int

オプショナル型

// ?がついてたらOptional<Wrapped型>
let optional: Int? = 1
type(of: optional) //-> Optional<Int>

// ?は実はシンタックスシュガーで以下と同義
let optionalFull: Optional<Int> = 1
type(of: optionalFull) //-> Optional<Int>

オプショナル型を非オプショナル型にアンラップする方法は2つある

// ① オプショナルバインディングを使う
if let notOptional1: Int = optional {
    // アンラップ対象のオプショナル型がnilの場合はこのIf文に入らない
    type(of: notOptional1) //-> Int
}
// ② 強制アンラップする
let nonOptional2: Int = optional!
// 非オプショナル型に代入する時に!をつけることでアンラップされる
// ただし、nilが入っていると例外が発生する。

ImplicitlyUnwrappedOptional型

// 変数名ではなく型名に!をつけることで、
// 「暗黙的に矯正されるオプショナル型」を宣言できる
let impUnwrappedOptional: Int! = 1
type(of: impUnwrappedOptional) //-> ImplicitlyUnwrappedOptional<Int>
// これを非オプショナル型に代入できる
let unwrappedOptional: Int = impUnwrappedOptional
// ただし、これも強制アンラップと同じでnilの場合に例外が発生する。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1