1-8 オプショナル型の使用法

Swiftには、値が存在しない可能性を表現するための特殊な型 Optional型 が用意されています。

プログラミング言語には、(かた) というものがあります。
String型は、文字列を表す型ですし、Int型は、整数を表す型です。

これらの型は、どのプログラミング言語でも共通の概念ですが、
Swiftには、値が存在しない可能性を表現するための特殊な型 Optional型 が用意されています。

他の多くのプログラミング言語には、値が存在しないことを表すために特別なソースコードが必要な場合がありますが、SwiftではOptional型がこの役割を果たします。

さすが、比較的新しい言語なだけありますね。

例えば、
他の言語では「null」や「undefined」といった特殊な値を使って値が存在しないことを表現することがありますが、SwiftではOptional型を使用してこの概念をより明確に扱います。

Optional型の使い方

是非、実際に操作しながら学んでいきましょう。
以下でSwiftのブラウザ実行環境が使えます。 print()で出力される文字を確認してみましょう。https://paiza.io/ja/projects/new

例えば、次のような場合があります。
ある関数が数値を返すが、その関数が失敗した場合には何も返さない時。
これをOptional型を使って表現すると、数値が返る場合はその数値を持ち失敗した場合は値を持たない(nil)ということができます。

// 整数の割り算を行う関数
func getQuotient(_ x: Int, _ y: Int) -> Int? {
    // ゼロでの割り算をチェック
    guard y != 0 else {
        // ゼロでの割り算は不可能なので、nilを返す
        return nil
    }
    // 割り算の結果を返す
    return x / y
}

この場合、getQuotient関数はOptional型を返します。

ゼロでの割り算が発生した場合には値を持たない(nil)を返すためです。

// getQuotient関数を呼び出して割り算を行う
let warenai = getQuotient(10, 0) // 0では割れない
let warikireru = getQuotient(10, 2) // 2で割れる

print(warenai) // nil
print(warikireru) // Optional(5) Optional型になる

Optional(5)のままだと、そのまま扱うことができないので、値のみを取り出す必要があります。

以下のようにして、Optional(値)の値のみを取得できます。

// getQuotient関数を呼び出して割り算を行う
let result = getQuotient(10, 2)

// 値のみを表示する
if let value = result {
    print(value) // 5
} else { // nil だった場合の処理も書いておく
    print("0で割り算はできません。エラーが発生しました")
}

まとめ

  • Optional型は、値が存在しない可能性を表現する特別な型である
  • Optional型は、値のみを取り出して使用する必要がある

ドリル

if let unwrappedFruit = lastFruit {
    print(unwrappedFruit) // Orange
} else {
    print("最後の要素はnilです")
}