すらぼうの開発ノート

モバイルアプリエンジニアのメモ

【Swift】キャスト(型変換)について

本エントリではSwiftにおけるキャスト(型変換)についてまとめる。

キャスト(型変換)とは

特定のインスタンスのデータ型を、他のデータ型に変換すること。

例えば以下のように文字列型のデータを整数型のデータに変換する操作などを指す。

"100" → 100

種類

キャストには大きく分けて次の2種類が存在する。

  • アップキャスト
  • ダウンキャスト

以下でそれぞれを説明する。

アップキャスト

より抽象的な型に変換すること。

例えば StringAnyに変換すること。

アップキャストはより大きい集合のデータ型へ変換を行うため、必ずキャストすることができる

ダウンキャスト

より具体的な型に変換すること。

例えばAnyStringに変換すること。

ダウンキャストはより小さい集合のデータ型へ変換を行うため、キャストができない場合がある


方法

アップキャスト

Swiftではアップキャストはオペレーターasで行われる。

例えば次の様に行う。

var value: String = "hello, world"

var value2: Any = value as Any

ダウンキャスト

アップキャストの場合は上記の流れで必ずキャストできる。

問題はダウンキャスト。こちらはキャストできない可能性を孕んでいるため、

  • as!
  • as?

のキーワードを使用してアンラップを行う必要がある。

as!

強制的にアンラップする。もしキャストできない場合はエラーとなる。

var value: String = "hello, world"

var value2: Int = value as! Int // これはエラー

as?

キャストできない場合、nilが返される

var value: String = "hello, world"

var value2: Int = value as? Int // value2にはnilが入る

参照

docs.swift.org