【Swift】as?演算子を使ったキャストでは結果がoptionalとなる
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
今日はSwiftのas演算子とas?演算子について解説したいと思います。
as演算子について
asはインスタンスをキャストします。
上記コード15行目のように、より抽象度の高い型(この場合はクラスA)からより具体的な型(この場合はクラスB)へ型変換(ダウンキャスト)するのが主な使い方です。
ただし、継承関係のないクラス(この場合はクラスC)へダウンキャストすると、実行時にアプリが落ちてしまいます。
as?演算子について
as?の場合、キャストが正しく行える場合にはそのインスタンス自身が返されますが、そうでない場合にはnilが返ります。よって結果はオプショナル型となります。
つまり、as?は型チェックとキャストを同時に実行しているようなものと言えるでしょう。
上記コード25行目のように、キャストが行えない(継承関係がない)場合にはnilが返ります。
ちなみに、以下のようにオプショナル型に対してもas?でキャストを行うことができるようです。
35行目の変数a1の形がA?(オプショナル型)となっていますね。
また、キャスト対象のオプショナル変数がnilの場合、as?の結果は常にnilとなるようです。
as?演算子の活用方法について
上記コードの例では、配列arrayの中にある整数だけを合計しています。69行目のas?と70行目のifで、キャストと同時に型チェックを行っているのが分かると思います。
また、if let構文を使って1行で型チェックとキャストを行うこともできます。
上記コードの例では、83行目と85行目で型チェックとキャストを行っています。
@akio0911はこう思った。
Swiftを使い始めて一番初めに頭が「???」となるのがオプショナル周り(?マークが付くもの)だと思うので、as演算子・as?演算子についてもしっかり押さえておきましょう。
ちなみにSwiftの文法については以下の書籍が詳しかったです。
関連記事
この記事が気に入ったら「いいね!」しよう
Twitterで更新情報をゲット!