Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

非オプショナル型

// 何もついてない場合は、非オプショナル型
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の場合に例外が発生する。
jmty
日本最大のクラシファイドサイト「ジモティー」を開発・運営するスタートアップ
http://jmty.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away