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

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

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の文法については以下の書籍が詳しかったです。

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

follow us in feedly

Feedlyで最新記事を購読

Twitterで更新情報をゲット!

LINEでご感想・ご要望お送りください!
(スマホでLINEを起動 > 友だち追加 > QRコード)

関連記事

20160509-200435

【Auto Layout】readableContentGuideを使わずに最大幅を定義する

iOS 9からUIViewにreadableContentGuideが追加されましたが、re

記事を読む

iPhoneアプリ開発の初心者にオススメな本はこれだ!iOS 7とXcode 5に対応!

僕が講師をしている初心者向けのiPhoneアプリ開発講座「アプリクリエイター道場」でも参考書とし

記事を読む

20150116-114410.jpg

プログラミング未経験者がSwiftの文法を学ぶのにオススメな本!「たのしいSwiftプログラミング」

楽しみにしていたSwiftの入門書「たのしいSwiftプログラミング」を読み終わったので、レビュ

記事を読む

20150327-131839.jpg

【Apple Watchアプリ】ボタン内の文字の先頭に画像を入れる方法【WatchKit】

Apple Watch向けのアプリを作るためのフレームワーク「WatchKit」。そのWatch

記事を読む

I20160228-162014.jpg

詳解 Swift 改訂版のKindle版が発売。リフローに対応!

今日気付いたんですが、「詳解 Swift 改訂版」のKindle版がいつの間にか発売されていまし

記事を読む

20150406-121104.jpg

【アプリ開発】選んだ色をUIColorの生成コードに変換できる「Developer Color Picker」

選んだ色をUIColorの生成コードに変換できる「Developer Color Picker」

記事を読む

20140916-130550

Swiftの列挙型、switch文、網羅性チェックが素晴らしい!

アップルの新プログラミング言語「Swift」をちょっとずついじってるんですが、列挙型とswitch文

記事を読む

20160416-142928.jpg

Swift 2.2で可能になったタプルの比較を試してみる

Swift 2.2でタプルの比較が行えるようになったので、色々と試してみました。   

記事を読む

20160804-193842.jpg

【Xcode 7】Storyboardで複数の制約をまとめて追加する方法

Xcode 7のStoryboardで、複数の制約をまとめて追加する方法について解説します!

記事を読む

I20150709-234536.jpg

Swiftの文法をキッチリ学ぶのにオススメな本「詳解Swift」

解説が細かすぎるのでプログラミング未経験者や初心者にはオススメできませんが、Objective

記事を読む

【HomeKit】家の照明をSiriで制御できるようにしてみた

Apple製品と家電を連携するシステム「HomeKit(ホーム

【メンズネイル】新宿区大久保のサロンでターコイズとピンクのメタルネイルにしてもらった

2016年10月22日、いつもお世話になっているネイルサロン「

[iOS][Swift]スタックトレース(コールスタック)を表示する2つの方法

iOSアプリ開発で、スタックトレース(コールスタック)を表

【使い方】iOS 10のSiriで出来る事299個をまとめてみた

そろそろiOS 11がリリースされそうな雰囲気ではありますが、iO

【メンズネイル】新宿区大久保のサロンでハーレイ・クインがテーマのネイルにしてもらった

2016年9月27日、いつもお世話になっている「Total b

→もっと見る

PAGE TOP ↑