swift as as! as?


class Animal {}
 
class Cat: Animal {}
 
class Dog: Animal {
	var name = "Spot"
}
 


// 从子类到父类的转换,这样是可行的。这个转换被官方称为“Guaranteed conversion”。
// 一个类型的值可担保转换到另一个类型,这种转换的成功可以由编译器来保证。例如:向上转换(例:从一个类转换到它的父类),或指明一个文本表达(例:将1转换成Float型)
let a = Dog()
a as Animal




let dog: Dog? = nil
dog?.name		// 评估为nil
dog!.name		// 引发运行时错误
 
let animal: Animal = Cat()
// ?和swift中其他的?用法类似,就是可选类型,可以让某一对象值为空。
animal as? Dog	// 评估为nil
// as! ,被官方成为强制转换"Forced conversion"
// 一个值强制转换为另一个值,它的安全性不能被编译器保证,因此它可能造成运行时错误。例如向下转换,将一个类向它的派生类转换。
animal as! Dog	// 引发运行时错误

猜你喜欢

转载自blog.csdn.net/linzhiji/article/details/128147442