class Animal {}class Cat: Animal {}class Dog: Animal {var name = "Spot"}
// 从子类到父类的转换,这样是可行的。这个转换被官方称为“Guaranteed conversion”。// 一个类型的值可担保转换到另一个类型,这种转换的成功可以由编译器来保证。例如:向上转换(例:从一个类转换到它的父类),或指明一个文本表达(例:将1转换成Float型)let a = Dog()a as Animallet dog: Dog? = nildog?.name// 评估为nildog!.name// 引发运行时错误let animal: Animal = Cat()// ?和swift中其他的?用法类似,就是可选类型,可以让某一对象值为空。animal as? Dog// 评估为nil// as! ,被官方成为强制转换"Forced conversion"// 一个值强制转换为另一个值,它的安全性不能被编译器保证,因此它可能造成运行时错误。例如向下转换,将一个类向它的派生类转换。animal as! Dog// 引发运行时错误