KENスクールブログ | パソコン教室・パソコン講座なら個別指導のKENスクール

BLOGKENスクールブログ

  1. KENスクール TOP >
  2. KENスクールブログ > プログラム > [iPhoneアプリ開発]Swiftのas(キャスト)

プログラム

[iPhoneアプリ開発]Swiftのas(キャスト)

KENスクールの動画配信サービス「KEN×ONLINE」

実行環境 Xcode version8.2

Swiftでインスタンスをキャストする場合 as を使います。
as には下記の三つの書式があり、それぞれを使い分ける必要があります。

as キャストの成功が保証されているアップキャスト、またはリテラルの確定(10 as Double)
as! ダウンキャスト時にエラーが起こりそうな場合
as? nilになる可能性がある場合

それでは、それぞれの使い方をコードで紹介します。

assample

Manクラスを継承したSuperManクラスと同じくManクラスを継承したUltraManクラスがあります。

46行目のManクラス型変数manは暗黙的アップキャストが行われます。

47行目で変数manをSuperMan型にキャストするためasを使いますがエラーとなります。理由は上記にもあるようにキャストの成功が保証されていないからです。(変数manのインスタンスがSuperMan型だとは限らないため)よってダウンキャスト時はas!を使います。

48行目で変数manをSuperMan型に強制ダウンキャストしています。今回は46行目と同様にインスタンスがSuperMan型だったのでダウンキャストが成功します。
これは場合によってキャストに失敗するかもしれないということ(変数manに格納されたインスタンスがSuperMan型以外の可能性)を視覚的に取ることが出来ます。

49行目は強制ダウンキャストですが変数manに格納されている元のインスタンスがSuperMan型なのでキャストが出来ずエラーとなります。

50行目は49行目と同じく無関係なクラスへのキャストですがエラーとはならずnilが戻ります。as?を使いキャストした場合失敗するとエラーではなく戻り値がnilとなるためです。

最後に53行目です。これは通常のアップキャストなのでasでキャストが可能となります。

 

この記事に関連する講座

最新言語「Swift」に対応!iPhoneアプリ開発スキルを身につけよう!

詳しくはこちら