前書き
Objective-CからSwiftいじりはじめて、Xcodeちゃんの補完で「なんじゃこりゃ!?」」って思った。
調べると色々出たけど、「つまり何よ?」ってのをパッと答えてくれるページが見つからなかったので書く。雰囲気だけ掴んで行間は自分で補完できる人のために。
つまり、何よ?
// fruitはnil許容型のオブジェクトとする
if let apple = fruit {
apple.juice()
} else {
print("There is no fruit...")
}
とは、つまり、
// fruitはnil許容型のオブジェクトとする
if fruit != nil {
let apple = fruit!
apple.juice()
} else {
print("There is no fruit...")
}
ってことです。
以下は補足なので、上記を見て「あ、なーるほど」って思える方はここまででOKです。
なんでif letとかあるの?
Swiftには二種類の型があります。
-
nil
を許容しない型(非Optional型) -
nil
を許容する型(Optional型)
そして多くの「nil
を許容する型」では、その変数を処理する前に、「nil
を許容しない型」に変換してあげる必要があります。
型に対して「nilを許容する」というコーティングを施したままだと使えないので、使う前にコーティングを剥がしてあげましょう、と。(これをUnwrapと呼びます。)
上記コードのlet apple = fruit!
がまさしくコーティングを剥がす作業をしている部分です。
で、毎度毎度nilチェックした後にコーティング剥がす1行を入れるのなんて面倒ですし、どこかで!
をつけ忘れてエラーが発生する、みたいなオチが見えますよね?
そういうのを防ぐために、if let
があるんですね。
あとがき
Optionalに関しては雰囲気を掴むための説明なので、詳しくは下記が詳しいです。
どこよりも分かりやすいSwiftの"?"と"!" - Qiita
ただ、「Optional」とか「Unwrap」とかそこらへんの単語が先に出てきて、せっかちな私は「・・・つまり?」って思っちゃうので、せっかちさん用の説明です。はい。
なんか間違っていたら是非ご指摘頂ければと存じます。