【Swift】as?演算子を使ったキャストでは結果がoptionalとなる

公開日: : 最終更新日:2016/02/10 iOSアプリ開発

記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

20141228-232009.jpg

今日はSwiftのas演算子とas?演算子について解説したいと思います。

as演算子について

asはインスタンスをキャストします。

20141228-224846.jpg

上記コード15行目のように、より抽象度の高い型(この場合はクラスA)からより具体的な型(この場合はクラスB)へ型変換(ダウンキャスト)するのが主な使い方です。

ただし、継承関係のないクラス(この場合はクラスC)へダウンキャストすると、実行時にアプリが落ちてしまいます。

    

as?演算子について

20141228-225318.jpg

as?の場合、キャストが正しく行える場合にはそのインスタンス自身が返されますが、そうでない場合にはnilが返ります。よって結果はオプショナル型となります。

つまり、as?は型チェックとキャストを同時に実行しているようなものと言えるでしょう。

上記コード25行目のように、キャストが行えない(継承関係がない)場合にはnilが返ります。

    

20141228-230002.jpg

ちなみに、以下のようにオプショナル型に対してもas?でキャストを行うことができるようです。

35行目の変数a1の形がA?(オプショナル型)となっていますね。

    

20141228-230341.jpg

また、キャスト対象のオプショナル変数がnilの場合、as?の結果は常にnilとなるようです。

    

as?演算子の活用方法について

20141228-230948.jpg

上記コードの例では、配列arrayの中にある整数だけを合計しています。69行目のas?と70行目のifで、キャストと同時に型チェックを行っているのが分かると思います。

    

20141228-231404.jpg

また、if let構文を使って1行で型チェックとキャストを行うこともできます。

上記コードの例では、83行目と85行目で型チェックとキャストを行っています。

    

@akio0911はこう思った。

Swiftを使い始めて一番初めに頭が「???」となるのがオプショナル周り(?マークが付くもの)だと思うので、as演算子・as?演算子についてもしっかり押さえておきましょう。

ちなみにSwiftの文法については以下の書籍が詳しかったです。

この記事を書いた人
あきお(@akio0911
派手髪iOSエンジニア。Twitterアカウントは@akio0911。YouTubeチャンネル「あきおチャンネル」にてiOSアプリ開発講座を公開中。著書に「iPhoneアプリ開発レシピ」「cocos2d for iPhoneレッスンノート」など。iOSアプリ開発をテーマとしたオンラインサロン「アプリ道場サロン」を運営。東京・大阪にてアプリ開発講座「アプリクリエイター道場」を主催。

関連記事

この記事が気に入ったら「いいね!」しよう

Twitterで更新情報をゲット!

PAGE TOP ↑