Swiftキャスト
Swfitではキャストする場合に「!」「?」を使う場合があります。
as
・型変換・キャストが必ず成功すると保証されたときに使用
・アップキャスト
・リテラルの型を指定
class Animal {} class Dog: Animal {} let dog = Dog() // dogはインスタンス let animal = dog as Animal // dogをスーパークラスのAnimalのインスタンスにアップキャスト let floatValue = 1 as Float // 型指定
as!
・強制的にダウンキャスト
・ダウンキャストが成功することがわかっている場合
・ダウンキャストが失敗するとランタイムエラーになる
let animal1: Animal = Dog() let dog = animal1 as! Dog // 問題なし let animal2 = Animal() let dog2 = animal2 as! Dog //
as?
・ダウンキャストが成功するかわからないときに使用
・戻り値はオプショナル型
・失敗した場合は、Optional.None
let animal1: Animal = Dog() let dog = animal1 as? Dog // dogの型はOptional<Dog> let animal2 = Animal() let dog2 = animal as? Dog // エラーは起こらない。dog2の中身は.None