この記事はなに?
Appleのサンプルコードを読んでいる時に見かけない構文を見つけたので、調べました。
for case let foundObject as VNRecognizedObjectObservation in results {
let bestLabel = foundObject.labels.first!
let objectBounds = foundObject.boundingBox
print(bestLabel.identifier, bestLabel.confidence, objectBounds)
}
気になったのは、1行目です。
for case let foundObject as VNRecognizedObjectObservation in results
コレクションに対して、処理を反復していることは理解できましたが、case let x as T
が謎でした。
ちなみに、このサンプルコードは、Vision
フレームワークを使った画像認識アプリです。
results
には、Vision
による検出結果が並んでいると思われます。
Swiftを基礎から学ぶには
自著、工学社より発売中の「まるごと分かるSwiftプログラミング」をお勧めします。変数、関数、フロー制御構文、データ構造はもちろん、構造体からクロージャ、エクステンション、プロトコル、クロージャまでを基礎からわかりやすく解説しています。
マッチした値だけキャストする
単純にしたコードを実行して、動作を確認しました。
実行環境
Xcode 12.1
Swift 5.3
macOS 10.15.7
let values: [Any] = [ "1", 2, 3.4]
for case let number as Int in values {
print(number)
}
// Prints 2
考察
同じ実行結果を得るだけであれば、他にもいろんなアプローチがありそうです。
ただ、Appleのサンプルコードだけあって、極めてシンプルな記述で実装されているのではないかと思います。