[Swift]「キャスト」とは?

Swift

どうも、ちょげ(@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種類あります。

  • アップキャスト
    具体的(下位)な型から抽象的(上位)な型への変換
  • ダウンキャスト
    抽象的(上位)な型から具体的(下位)な型への変換

種類によって使い方や挙動が違うので、覚えておくようにしましょう。

参考

コメント

タイトルとURLをコピーしました