言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Swift辞典

  1. トップページ
  2. Swift辞典
  3. Optional / ? / !

Optional / ? / !

Swiftの『Optional』は「値があるかもしれないし、nilかもしれない」型です。変数名の後に『?』を付けて宣言し、nil安全なプログラミングを実現します。

構文

// Optional型の宣言
var 変数名: 型? = 値
var 変数名: 型? = nil

// 強制アンラップ(値があることが確実な場合のみ)
変数名!

// Optional.noneとOptional.some
Optional<型>.none   // nil と同じ
Optional<型>.some(値) // 値を包んだOptional

構文一覧

構文概要
型?Optional型を宣言します。値またはnilを保持できます。
nil値がないことを表す特殊な値です。
変数!強制アンラップします。nilの場合はクラッシュします。
変数 == nil値がnilかどうかを確認します。
変数 != nil値が存在するかどうかを確認します。
Optional.some(値)値をOptionalに包みます(明示的な書き方)。
Optional.nonenilと同等のOptionalの表現です。

サンプルコード

// Optional型の宣言
var name: String? = "太郎"
var age: Int? = nil

print(name)  // Optional("太郎")
print(age)   // nil

// nilチェック
if name != nil {
    print("名前あり: \(name!)")  // 強制アンラップ(nilでないことを確認済み)
}

// Optionalの更新
name = nil  // nilを代入できる
age = 25    // 値を代入できる

print(name)  // nil
print(age)   // Optional(25)

// Optional.someとOptional.noneの明示的な使用
let value: Optional<Int> = Optional.some(42)
let empty: Optional<Int> = Optional.none

print(value)  // Optional(42)
print(empty)  // nil

// 文字列のOptionalからIntへの変換(標準ライブラリの例)
let str = "123"
let parsed = Int(str)  // 戻り値はInt?(変換失敗するとnil)
print(parsed)  // Optional(123)

let invalid = "abc"
let failed = Int(invalid)
print(failed)  // nil

概要

『Optional』はSwiftの型システムの中核です。他の言語でnullポインタ参照エラーが起きる場面でも、Swiftではコンパイラが安全なアンラップを強制することでクラッシュを防ぎます。

強制アンラップ(『!』)はnilの場合にクラッシュするため、使用には注意が必要です。nilを強制アンラップするとランタイムエラー(EXC_BAD_INSTRUCTION)が発生します。安全なアンラップには『if let』や『guard let』、『??』演算子を使いましょう。

Optionalの安全なアンラップについてはif let / guard let(Optional Binding)を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。