Apple は、同じ型のオブジェクトをダウンキャストする例を示しています。
let someObjects: [AnyObject] = [
Movie(name: "2001: A Space Odyssey", director: "Stanley Kubrick"),
Movie(name: "Moon", director: "Duncan Jones"),
Movie(name: "Alien", director: "Ridley Scott")
]
次に、抽象変数「オブジェクト」を作成し、期待どおりにキャストすることで、個々の属性にアクセスできます (ムービー) :
for object in someObjects {
let movie = object as! Movie
print("Movie: '\(movie.name)', dir. \(movie.director)")
}
しかし、次のレベルに進んで、たとえば映画のサブクラスがあるとしたらどうなるでしょうか。
無声映画
コメディ
アクション
それぞれが同じ属性 (名前と監督) を持っています。
親クラスとしてそのサブクラスを認識できると想定したため、上記と同じ方法で「ムービー」としてキャストしようとしましたが、もちろんこれは機能しませんでした。そうでなければ、この質問は存在しなかったでしょう!