【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コード)

関連記事

20141006-103526.jpg

Xcode 6におけるNSUserDefaultsのplistの在り処と、内容を確認・書き換え・削除する方法

Xcode 6にて、NSUserDefaultsのplistファイルの在り処と、内容を確認・書き

記事を読む

20160804-193842.jpg

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

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

記事を読む

I20150909-225806.jpg

Functional Programming in Swiftを読むために、すごいH本を読み終えた感想

「Functional Programming in Swift」という本がありまして、

記事を読む

I20160525-233821.jpg

SwiftBondを使ってみた。observeやObservableの使い方など

Swiftバインディングフレームワークである「SwiftBond」を使ってみました!

記事を読む

I20150724-135442.jpg

iPhoneのホーム1画面目に置いているオススメなアプリ38本(2015年9月版)

2014年7月に「iPhoneアプリ開発にオススメの本10選(2014年7月版)」という記事

記事を読む

Auto LayoutやStoryboardの仕組みをしっかり理解できる!「UIKit徹底解説」

インプレスジャパン様より献本御礼。UIKit周りを中心に、「Auto Layout」「Story

記事を読む

I20160130-110811.jpg

【解決】Redundant conformance of ‘NSDate’ to protocol ‘Comparable’エラーが出た時の対処方法

アプリ開発中に「Redundant conformance of 'NSDate' to pro

記事を読む

I20160129-115948.jpg

【対処法】Swift 2(iOS 9)ではUITextFieldのtextがString?になっている

Swift 1(iOS 8)時代において、UITextFieldのtextプロパティは va

記事を読む

20160508-170745.jpg

SwiftTaskで失敗したタスクによって異なるエラー処理を行う方法

SwiftTaskで複数のタスクを.successでチェーンさせ、失敗したタスクによって

記事を読む

20150109-223509.jpg

【Xcode 6】対応する開き括弧と閉じ括弧を調べる方法

Xcodeで、対応する開き括弧と閉じ括弧のを調べる簡単な方法があったので紹介したいと思います!

記事を読む

I20170228-002742.jpg
約3ヶ月で体脂肪率を6.2%も落とせたキッカケについて

(右上の赤枠内がダイエット開始前、左下の赤枠内が3ヶ月後の数値

I20161224-174949.jpg
「季節の野菜を直接配送!季節のスムージー」を買ってみた

「FiNCモール」で、「季節の野菜を直接配送!季節のスムージー」を

I20161002-152537.jpg
【メンズネイル】東京・新宿のネイルサロンでマットネイルしてもらった

2016年7月18日、東京・新宿のメンズOKなネイルサロン「Tot

I20160925-163452.jpg
タブバーアイコン非選択時の色を変更する方法【iOS 10】

UITabBarControllerで、タブバーアイコン非選択時の

I20160924-123726.jpg
iPad Pro 9.7インチ SIMフリーモデルにFREETELのSIMを入れて使ってみた

今までiPad miniで使っていたFREETELのSIM

→もっと見る

PAGE TOP ↑