読み進めていく本↓
前回⇒「【Swift奮闘記ep7】関数後半戦(引数名の省略、デフォルト値、スコープ、関数の決まり事)」
関数が終わり、基本的な文法は残す所「オプショナル」のみとなった。
聞いたことのない言葉である。さっそく見ていこう。
オプショナル
オプショナルは変数・定数の中身を隠すことができて、その状態を丸ごと変数や定数に代入することができる。
「中身があるのか、それとも空っぽなのかわからない」という値として扱います。
オプショナルで値を包むことをラップ(wrap)と言います。
ここまで全く意味がわからない。とりあえず「オプショナルで変数定数の中身を隠すことができて、それ自体を値として扱う」ということだ。
実際に例を見ていけばわかるかもしれない。
var sports: String? = “サッカー”
sports = nil
sportsという変数にサッカーという文字列を代入しているが、オプショナルで包む処理をしているので、この過程(”サッカー”を代入する過程)を見ていない人からしたらsportsに値が入っているかはわからない、ということだ。
またsports = nil といったように、変数の中を空っぽにすることもできる。
注意点として、オプショナルでラップされている場合じゃないと、nilは使えないということだ。理由はわからない。
※追記
nilは「変数の中身が空だよ」と伝えるもの。
よって変数の型がオプショナル型の場合のみ、nilを代入することができる。
次にオプショナルにラップした場合、オプショナル型となることに注意する。
以下のようにString型をラップするとオプショナル型となりString型の機能は失われる。
let drink = “Cola” // String型
var drinking: Stirng? = drink // Optional型
(drinkとdrinkingの型はそれぞれString型、Optional型)
uppercased( )というString型にしか使えないメゾッドを使ってみると、よくわかる。
drink.uppercased( )
drinking.uppercased( ) // エラーとなる
これだと2行目にエラーが出る。オプショナル型にString型のメソッドは使えないからだ。
対処法として
drinking?.uppercased( )
と?を入れればエラー回避ができ
“COLA”
とリザルトバーに表示されて一件落着である。
この?を挿入してエラー回避する方法をオプショナルチェーンという。
オプショナルチェーンによってオプショナルを解除できるといったほうがわかりやすいか。
オプショナルされてdrinkingはオプショナル型になっていたが、それをオプショナルチェーンで中身のString型の”cola”を取り出すといった感じだ。だからdrinking?.uppercased( )でちゃんと大文字が表示されるわけである。
言葉で説明するとわかりづらいが、本の図を見たらわかりやすかった。理解。
ここでさらに「オプショナルチェーンで取り出した値はオプショナル型になる(重要)」ので、同じようにString型のメゾッドを使うとエラーになるため、またオプショナルチェーンを使うことになる。
つまり
var test = drinking?.uppercased( )
test?.lowercased( )
変数testにはオプショナル型の”Cola”が代入されているので、それを小文字化するメゾッドlowercased( )を使う際はオプショナルチェーン(?を挿入する)を使えばいい。
上記の処理をまとめて
drinking?.uppercased( ).lowercased( )
といったふうに一気に実行することもできるので覚えておこう。
まだオプショナルは続くが今回はここまで。
続き⇒「【Swift奮闘記ep9】オプショナル(強制的・暗黙的なアンラップ、オプショナルバインディング)」
今回出てきた覚えて置きたいメゾット
uppercased( ):大文字にする
lowercased( ): 小文字にする
コメント