Tips

オプショナル型の使い方について超簡単に復習しよう!その1

オプショナル型の使い方について超簡単に復習しよう!その1

STEP1.オプショナル型ってそもそもなに?


オプショナル型とは「値が無い状態を保持できる変数(定数)の型」を指します。
Swiftでは「値が無い」という状態を「nil」という言葉で表します。Javaとかでいうnullみたいなものですね。
まず、以下の例を見てみましょう。

var num1:Int = 100
var num2:Int
        
print(num1)
print(num2)

これを実行しようとしてもエラーが表示されてビルドすることができません。
エラー文言を確認すると、「Variable ‘num2’ used before being initialized」と書かれています。
「変数num2に初期値を設定してよ」って言われているみたいですね。

とまぁこんな感じで、普通の型(オプショナル型以外のすべての型)は初期値が設定されていないと
絶対エラーになる
んですね。上記のInt型のnum1、num2はまさにその「普通の型」になります。

「初期値がない=nil」ということですので、普通の型はnil状態になっていることが許可されていない、
ということになります。

ここで登場するのが「オプショナル型」になります。一番最初にも書きましたが、オプショナル型は
値が無い状態を保持できる変数(定数)の型」という意味でした。
つまり、「値が無いnil状態を許可してあげましょう」ということですね。許可してくれるのでエラーになりません。

【まとめ】

普通の型…「nilはダメッ!絶対ダメッ!!!」
オプショナル型…「nilでもOKやで。しゃーなしやで。」
という感じでしょうか。すごい適当な表現ですが。笑

もう少し真面目に説明します。なぜオプショナル型というものが存在するのかというと、世の中には
「値が設定されてなくても問題無いよね」といったものが結構あるんです。(「世の中には」と言うと大げさですが…)
身近なわかりやすい例でいうと、UILabelのtextプロパティなどがそれに該当します。
以下の例を見てみましょう。

let lb = UILabel()
lb.text = "Hello World"
lb.backgroundColor = UIColor.redColor()
lb.frame = CGRectMake(100, 100, 100, 50)
self.view.addSubview(lb)

s21_1
このコードを記述すると、「Hello World」と書かれた赤いラベルが表示されます。
当たり前ですけど、2行目の部分でtextプロパティに「Hello World」という値を設定しているからですね。
でもラベルってtextプロパティに値を設定していなくても問題なく表示されるんです。
試しに2行目をコメントアウトしてみましょう。

let lb = UILabel()
//lb.text = "Hello World"
lb.backgroundColor = UIColor.redColor()
lb.frame = CGRectMake(100, 100, 100, 50)
self.view.addSubview(lb)

s21_2
これでもエラーは表示されずにちゃんと画面上にラベルが表示されますね。
ただし、ラベルに文字はありません。

ラベルに文字が無い→textプロパティに値が設定されていない→nil状態になっている!!

ということです。
このtextプロパティは普通の型ではなく、オプショナル型として宣言されているんです。
だから値がなくてもエラーにならないんですねー。

最後にtextプロパティの型を確認しておきましょう。
lb.textのtext部分にカーソルを置いて、画面右のユーティリティエリアからクイックヘルプインスペクタを
開きます。内容を確認してみると、、
「var text:String? {get set}」
となっています。
s21_3
そう、このStringの後ろにある「?」こそがオプショナルの型であることを表しているのです!!!

ちなみに、lb.textをprint関数などで出力してみると、「nil」と出力されますよ。
ここからもオプショナル型であることが確認できますねー。

print(lb.text)      //「nil」と出力される

なんとなくわかってきたでしょうか?
今回はここまでにして、次回はオプショナル型の宣言の方法や使い方をみていきたいと思います。

TechProjin 開発系基礎講座 連載リンク

基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載

AIなどで注目急上昇!これから学ぶならPython!!
独学で学ぶ-pythonプログラミング 連載

汎用性◎ 定番プログラミング言語JAVA
Java基礎講座 連載

Recent News

Recent Tips

Tag Search