どうも、ちょげ(@chogetarou)です。
プログラミン言語「Swift」には、「キャスト」という機能があります。
キャストとは、簡単にいうと「変数の型を別の型に変換すること」です。
それだけ聞くと簡単なんですが、キャストには2種類あります。
アップキャスト
1つが「アップキャスト」です。
アップキャストとは、具体的な型から抽象的な型に変換するキャストのことです。
別の言い方では、下位の型から上位の型への変換とも言います。
動物で例えると、猫という型から哺乳類という抽象的な型にする感じです。
アップキャストは、値の横に「as 変換したい型」と書きます。
var number: [Int] = 1 //Int型の1
var upCast = number as Any //Int型からAny型に変換
また、アップキャストは、変換後の型が変換前の型の上位の型でなくてはいけません。
Int型はString型には変換できないといった感じです。
同じように動物で例えると、猫から犬には変換できないようなものです(してほしくもありませんが)。
ダウンキャスト
もう1つが、「ダウンキャスト」です。
ダウンキャストは、アップキャストとは逆に「抽象的な型から具体的な方に変換するキャスト」です。
別の言い方だと、上位の型から下位の型への変換です。
お馴染みの動物の例で行きますと、哺乳類から猫への変換です。
そして、ダウンキャストには、「as? + 型」と「as! + 型」の2つのやり方があります。
2つの違いは、キャストに失敗した時の結果です。
as?の場合は変換に失敗した際に結果としてnil(ニル)を代入します。
as!の場合は、失敗するとしても強制的に変換させます。
とはいっても、実行した時に変換できてるわけではないのでエラーが出ます。
つまり、失敗した時にnilが入るのがas?、失敗するとエラーを出すのがas!です。
var number : [Any] = "abc"
var downCast = number as? String //成功
var downFail = number as? Bool // nil
var downFail2 = number as! Bool // エラー
まとめ
キャストは、変数の型を変換することです。
キャストには2種類あります。
- アップキャスト
具体的(下位)な型から抽象的(上位)な型への変換 - ダウンキャスト
抽象的(上位)な型から具体的(下位)な型への変換
種類によって使い方や挙動が違うので、覚えておくようにしましょう。
コメント