as とは?
型を変換することを意味します。
詳しく
例えば生き物を示すクラスCreatureと
これを継承したPersonがあるとします。
class Creature { ... }
class Person: Creature { ... }
Personクラスをインスタンス化するとPerson型のインスタンスが出来上がります。
let person = Person() //personはPerson型
このpersonをCreature型の変数に入れてみます。
let creature: Creature = person
すると変数creatureはPerson型からCreature型として認識されてしまい
Person型として扱えなくなってしまいます。
もう一度Person型として扱いたい!
そんな時に使うのがasです。
asを使ってCreature型からPerson型へダウンキャストします。
let personA = creature as! Person
これでpersonAはPerson型として再度扱えるようになりました。
でも、ん? よく見るとas!の!ってなんだ?
as、as!、as?の違い
いづれにおいてもasは型を変換することは間違い無いですが
必ず変換に成功するか?
この条件によってどれを使うかが変わってきます。
必ず成功する場合
Person型はCreature型を継承しているため必ず型の変換に成功します。
let creature = Person() as Creature //asでOK!
必ず成功するとは限らない場合
Creature型のインスタンスは必ずPerson型であるとは限りません
//as!かas?でないとだめ!
let person = Creature() as? Person //もし変換に失敗したらnilが返る
let person = Creature() as! Person //もし変換に失敗したらアプリがクラッシュ