[Swift 基本の型 第5回] Any型

f:id:KAFAppFactory:20200622211326j:plain

Swiftの基本の型 第5回 Any型をまとめます。今回の内容はかなり少なく、またAny型ってこれどうなのかな。。。笑といった内容ですので、アプリなどで使ってわかったことを追記していきたいと思います。
本記事は「Swift実践入門」を参考にしています。

gihyo.jp

Any型とは

その名の通り、任意の型を表します。(人によっては総称型と呼んでいる人もいます。)
Swiftでは、すべての型が暗黙的に準拠している特別なプロトコルとして実装されています。

Any型の変数や定数にはどのような型の値も代入できるため、代入する値の型が決まっていない場合に使用します。(個人的には、この代入する値の型が決まっていない場合という状態が想像できず、どこで使えるんだろ状態になっています。笑)

実際には下記の例のように、他の型の値をAny型として扱います。

例 )

let a: Any = "Hello"
let b: Any = 20200515

例を見てもらってわかる通り、Any型はこれまでの型のようにリテラルやイニシャライザによって値を生成するものではなく、他の型の値を取り扱います。

Any型への代入による型の損失

Any型で全ての値を取り扱えるなら、全部これでいいじゃんと思ってしまいますが、そんなうまい話はありません。
注意点として、Any型の変数や定数に代入すると、元の型の情報は失われてしまいます。つまり、元の型では可能だった操作ができなくなってしまいます。

下記の例では、Int型の四則演算をAny型でしている例で結果はエラーとなります。これはInt型では四則演算が定義されていますが、Any型では定義されていないためです。

例 )

let c: Any = 100
let d: Any = 50
c + d // コンパイルエラー

このようにAny型への代入は値に対する操作の幅を狭めてしまうため、可能なかぎりAny型への代入は避けるべきです。 じゃあ、尚更これいつ使うんだろうって感じました。

終わりに

今回、Swift 基本の型 第5回としてAny型をまとめました。全ての型の値を許容する万能的な型ですが、元の型でできたことができなくなったり、正直不便ですのであまり使わないかなと思います。笑