最初に
これは基本中の基本なのでこんなの常識すぎやろばかじゃねーのと思う人は嘲笑いながらこの記事にいいねを押しましょう。
なんかたまに見る??
let a: Int? = 1
let b = a ?? 5
この二つの?は最初なんのことかさっぱりだったが、この場合aの値が仮にnilだった場合bにはnilではなく5が代入されるという感じらしい。
謎のasとas?
結論から言うとasはアップキャストas?はダウンキャストらしい。
具体例を出すとまずasの場合
let a = "a" as Any
このようにすることで"a"(string型)をAny型として扱うことができる。これにより型アノテーションも書かなくてよくなる。
ただアップキャストの名前の通り階層的に下位の型を上位の型にすることはできるがその逆はできない。
例えばany型をstringにすることは出来ない。
string型をint型にするなども出来ない(二つとも継承し合ってないため)
ダウンキャストはas?とas!がある。as?の場合
let any = 1 as Any
let a = any as? Int // Optional(1)
let a = any as? String //nil
ダウンキャストができる型関係の場合Optional型で返されるが、ダウンキャストできない場合nilが返される。
一方as!の場合ダウンキャストできるとwrapped型ダウンキャストできない場合はエラーになります。
基本的にはas?を使うのがいい?
まとめ
とりあえずこんだけにしときます。またなんか合ったら追加していくかもしれないし追加しないかもしれない。