Swiftにおいてキャストしてその値を使うときはas?
でキャスト、
Optional
型にしてそのOptional
型に関する
Optional Binding
によって値を取り出すことが多いと思います。
let a: Any = 120
if let b = a as? Int {
// b を使う処理
}
しかし、これだと一回Optional
を経由しているため流れが少し複雑です。
別の書き方があります。
let a: Any = 120
if case let b as Int = a {
// b を使う処理
}
これだと、Optionalを通らず安全にキャストできます。
速度面
1万回実行時の速度
as? |
case |
---|---|
0.011s | 0.001s |
約10倍の差がある。
Swift Standart Libraryでも case
の方が多用されている。
Swift.printの中身から引用
https://github.com/apple/swift/blob/9af806e8fd93df3499b1811deae7729176879cb0/stdlib/public/core/OutputStream.swift#L375