Swiftのoptional型を使いこなすための7つのポイント

19/03/03 16:25:46     19/04/08 10:46:11

Swiftのoptional型??

optional型とは、空の値を保持することのできる変数です。この状態をSwiftではnilで表します。

このページでは、optional型の使い方やそのメリット等について解説していきます。

ポイント①まずはoptional型の使い方を押さえる

まずoptional型を使うためには宣言する必要があります。

サンプルは以下です。

var text: String?

変数の型の後ろにクエスチョンマークが付きます。optional型は変数を宣言すると自動的にnilが代入される仕様です。

たとえば、以下のようにoptional型を宣言して出力して見ます。

var name: String?
print(name)

上記のコードを実行すると、nilと出力されます。

たとえばoptional型以外で宣言してnilを入れると以下のようにエラーになります。

var name: String
name = nil

これだとエラーになります。

また配列ディクショナリでも同様に宣言できます。

var foods1: Array<String>?
foods1 = ["meat", "rice", "vegetable"]
print(foods1)

var foods2: Dictionary<String, Int>?
foods2 = ["meat": 500, "rice": 200, "vegetable": 300]
print(foods2)

上記のソースコードを実行すると、以下のようにコンソール出力されます。

Optional(["meat", "rice", "vegetable"])
Optional(["meat": 500, "rice": 200, "vegetable": 300])

ポイント②optional型のメリットを考える

optional型は上記の通りnilが入った状態にできますが、なぜそのような仕様になっているのか疑問に思うかもしれません。

その理由は、Swiftではoptional型以外のnilを参照しようとするとアプリケーションが落ちてしまうからです。

具体的になぜnilを使う必要があるのかはアプリケーションによって様々です。

ポイント③optional型のアンラップを使う

optional型はnilを扱えますが、逆に他の変数と同じように扱うことはできません。

たとえば、以下のサンプルコードのようなことです。

var num1: Int = 1
var num2: Int? = 2

print(num1 + 1); // 2
print(num2 + 1); // エラー

Int型と同じように扱うことはできません。そこで、アンラップという方法を行います。

optional型の宣言ではクエスチョンマークを付けましたが、アンラップではびっくりマークを付けます。

サンプルコードは以下です。

var num: Int?

num = 100

print("num:\(num!)")

上記のコードを実行すると、以下のように出力されます。

num:100

このようにアンラップするとoptional型の変数と同じように扱うことが可能です。

ただし、アンラップすると元のoptional型のようにnilがエラーになるので注意が必要です。

ポイント④optional型のバインディングを使う

optional型のバインディングとは、optional型がnilのときはfalse、nil以外のときはtrueを返すものです。

サンプルコードは以下のようになります。

var num: Int?

if let sum = num {
    print("sum:\(sum)")
} else {
    print("値が設定されていません。")
}

上記のコードではif文でtrueかfalseかを判定しています。

結果的に変数にはnilが入っているので、以下のようにコンソール出力されます。

値が設定されていません。

ポイント⑤optional型を暗黙的に宣言する

optional型は上で説明した通りクエスチョンマークを付けて宣言するのですが、暗黙的なoptional型の場合はビックリマークを付けます。

具体的には以下のようになります。

var text: String!

optional型を暗黙的に宣言すると、使用時にアンラップする必要がなくなります。

上でアンラップの際にはびっくりマークを付けると解説しましたが、イメージとしては暗黙的にoptional型を宣言すると最初からアンラップされているような感じです。

ポイント⑥guard let 構文を使用する

guard let 構文はif let構文に比べるとネストが深くなりにくく、またアンラップしたものをずっと使えるというメリットがあります。

ただし基本的にnilがあると処理が終了してしまうため、ロジックによっては使いにくいです。

guard let 構文を使いながらnilが来ても処理終了しない方法もありますが、わざわざそのようなロジックにしなくても良いかと思います。

guard let 構文のサンプルコードは以下です。

let a: Int? = 1
guard let b = a else { return }
print(b) // 1

let c: Int? = nil
guard let d = c else { return } // return される
print(d)

ポイント⑦”?”と”!”の違い

“?”と”!”の違いは上でも触れましたが、今一度比較して違いを把握しておいた方が良いかもしれません。なぜなら、単純に”?”で書かれたり”!”で書かれたりすると混乱するからです。何が違うのかよくわからないとすっきりしない部分があるので、把握しておきましょう。

まず”!”は暗黙的アンラップ型のオプショナル型です。”?”は一般的なoptional型です。またSwiftではオプショナル型以外でも”?”と”!”を使用する機会が多いです。オプショナル型の使い方とはまったく別ですが、例としては以下のようになります。

delegate?.callDelegateMethod()
label.setFont(font!)

一方で、以下はoptional型のサンプルです。

var hoge: String?
var fuga: Int!

出力まで含めてみると以下のようになります。

var hoge: String?
println(hoge)
# => nil
var fuga: Int!
println(fuga)
# => nil

“?”でも”!”でも同じように出力されました。

一応非オプショナル型とオプショナル型の違いをまとめておくと、以下のようになります。

オプショナル型

・データ型(Stringの場合)
String?またはString!
・nilの代入
可能
・初期値
nil
・変数に値を代入しない場合
nil

非オプショナル型

・データ型(Stringの場合)
String
・nilの代入
不可
・初期値
何もない
・変数に値を代入しない場合
エラーが起きる

まとめ

以上、Swiftのoptional型について解説してきました。

今回紹介したのは基本事項ですが、実際の開発でどのように使われるかはアプリケーションによります。

optional型自体は単純なのですが、使い方のバリエーションは豊富なので、後は実際のシステムを見て勉強していくのが良いでしょう。

アプリケーションのソースコードを見るといろいろな用途で使用されています。

案件量が豊富なアルマサーチ

アルマサーチ

最後に、アルマサーチのご紹介!

アルマサーチはフリーランス向けに案件をご紹介することに特化したエージェントサービスです。豊富な案件量から、安定して継続的な案件のご紹介を実現しており、口コミから登録エンジニアが急増中です。

アルマサーチが選ばれる理由

  1. 豊富な案件量。週3〜4日の案件や在宅リモート案件も。
  2. 優秀なコンサルタント陣。
  3. 案件に参画後もしっかりサポート。

豊富な案件量

フリーランス向けに特化し、業界屈指の案件量を誇ります!週3〜4日の案件や、在宅リモート案件もありますし、その他あらゆる希望をしっかりお伝えください。最適な案件のご紹介をさせていただきます。

優秀なコンサルタント陣

技術に疎く、開発の希望を伝えても響かないエージェント・・・嫌ですよね。アルマサーチにはそのような者は一切おりません!さらに独立にまつわる税金や保険関係に詳しいスタッフが徹底的にサポートさせていただきます。

案件に参画後もしっかりサポート

常駐先が決まった瞬間に、一度も連絡が取れなくなるエージェント・・・いますよね?アルマサーチでは、そのようなことは一切ありません!常に電話やメールは即対応しますし、月に1度のランチミーティングなどから現場の状況を細かくヒアリングし、就業環境改善に尽力いたします。

相談する

▼Swift関連の記事一覧
1, 【Swiftのフリーランス案件情報付き】仕事やエンジニアの将来性・学習方法!
2, 繰り返し処理に使えるSwiftのfor文とfor-in文の便利な使い方まとめ
3, 条件分岐に便利なSwiftのSwitch文の使い方まとめ
4, アプリ開発でよく使うSwiftの4つの文法を解説します
5,(この記事)Swiftのoptional型を使いこなすための7つのポイント
6, Swiftで文字列を扱うためのstring型の使い方
7, Swiftでの配列の宣言・初期化・代入・参照の方法まとめ
8, 実際の開発現場でのSwiftの変数・定数の使われ方を解説します
9, Swiftでif let文を使って出来ることとguard letの使い分けに関して
10, 開発現場でよく使うSwiftのif文の条件分岐をまとめました
11, SwiftにおけるTupleの使い方とわかりやすく解説します
12, 初心者にオススメのSwiftのサンプルコードをまとめてみました
13, SwiftのString、Int、Doubleの型の変換方法をまとめました
14, 開発現場で役に立つSwiftのクロージャの使い方
15, Swiftでwhileを使って上手に繰り返し処理を行おう
16, Swiftで文字列の長さをチェックするのにlengthを使ってみよう
17, Swiftのdictionaryの使い方と初期化方法をまとめました
18, Swiftの値渡しと参照渡しに関するまとめ
19, Swiftで参照渡ししたい時のinoutの便利な使い方
20, Swiftでfor-in文でindexを使いたい時の方法まとめ
21, Swiftでのクラスとstruct(構造体)の使い分けを解説します

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する