今回はSwiftにおけるif let文について。
iOSアプリ開発をし始めた頃に下記コードのif let ~の部分が全く理解できず、だいぶ苦しんだ記憶がある。
1 2 3 4 5 6 7 | //productPriceはオプショナル型のプロパティとする if let price = productPrice { print("商品の価格は \(price) 円です。") } else { print("商品の価格が設定されていません。") } |
理解してしまえば、「なるほど、そういうことか!」という内容なのだが、理解するまでにちょっと時間が掛かったので、備忘録として理解しやすい形で記事にしておこうと思う。
私と同じように理解に苦しんでいる人の参考に少しでもなれば幸いだ。
if let 文はどういう意味?
結論から言うと、if let文は対象のプロパティ(オプショナル型)の値がnilかどうかチェックし、nilではない場合(値が存在する場合)はそのプロパティをアンラップ処理してくれる便利な仕組みだ。
1 2 3 4 5 6 7 8 9 | //productPriceはオプショナル型のプロパティとする if let price = productPrice { //productPriceに値が存在する場合に実行 print("商品の価格は \(price) 円です。") } else { //productPriceに値が存在しない=nilの場合に実行 print("商品の価格が設定されていません。") } |
上記コードにおいて、if letでチェックの対象となるプロパティが productPrice だ。
if let がtrueになる場合
このproductPriceプロパティ に値が存在する場合、priceにその値が代入される。
そして、if文の条件式がtrueとなり、直後の{~}が実行される。
例えば、productPrice=300の場合は下記となる。
productPrice=300 、つまり値が存在するので、定数priceにproductPriceの値が代入される。
定数 price に値が代入されるので、if 文の条件がtrueとなり、直後の青色部分(then節)が実行される。
その結果、コンソールには、
「商品の価格は300円です。」
と表示されるのだ。
if let がfalseになる場合
一方、productPriceプロパティ に値が存在しない=nilの場合、priceへの値の代入は行われない。
そして、if文の条件式はfalseとなるので、else以降の青色部分が実行される。
その結果、コンソールには
「商品の価格が設定されていません。」
と表示される。
if let を使わずに書く場合
上記コードをif letを使わずに書くと下記のように変換できる。
productPriceに値が存在するかどうかを判定し、nilではない場合はオプショナル型のproductPriceをアンラップしてpriceに値を代入している。
1 2 3 4 5 6 7 | //productPriceがnil以外かどうかをif 文で判定 if productPrice != nil { let price = productPrice! //productPriceをアンラップしてpriceに格納 print("商品の価格は \(price) 円です。") } else { print("商品の価格が設定されていません。") } |
まとめ
Swift における if let 文の要点は下記だ。
- if let は対象のオプショナル型のプロパティがnilかどうかをチェックし、nil ではない場合はアンラップしてくれる便利な仕組み。
- 対象のプロパティに値が存在する場合は直後の{~}( then節)が実行される
- 対象のプロパティ= nil の場合はelse節が実行される
if let の理解に苦しんている人の参考に少しでもなれば幸いだ。