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 //もし変換に失敗したらアプリがクラッシュ