一: swift类型转化的四种操作
Swift是强类型语言,但也允许开发者通过is、as、as?和as!这四种操作来对类型进行判断和强制转换。其中is用作类型判断,而as?和as!则分别是类型转换的可选形式和强制形式。swift中比较常用的向下转换(downcast)是没有as操作符的,但是,如果现在有一个Dog类他的父类是一个Animal类,可以通过as将一个Dog类转化为Animal类.
为了方便后面的解释,这里假设定义了三个类,Animal、Dog和Cat,其中Dog和Cat都继承自Animal。
二: is操作符
is操作用来判断某一个对象是否是某一个特定的类,它会返回一个bool类型的值。is操作的逻辑很简单,某一个类的对象肯定是自己这个类,也一定是自己的超类,但超类的对象不是子类。如果两个类没有继承关系,那is操作一定返回false.
如下:
if Dog is Animal {
print("这是个小狗")
}
if Cat is Animal{
print("这是个小猫")
}
if Animal is Cat {
print("动物是一个猫") // 这种判断显然不能成立,返回的是一个false
}
注意: 以上这种使用is做判断,返回一个bool类型的结果,判断一个类是不是另外一个类的类型,就相当于我们在OC里面用到的isKindOfClass去判断一样
三: as转化
使用as转化,只能将一个子类转化成一个父类(或者超类),反过来不能转化成功
四:as!操作符
as!操作符是类型转换的强制格式,优点在于代码简单,如果可以转换,则会返回转换了格式的对象,如果无法转换就会抛出运行时错误。因此除非百分之百确定可以转换,否则不应该使用as!来进行强制类型转换,易造成程序crash。
五:as?操作符
as?和as!操作符的转换规则完全一样,但是as?会返回一个被转换类型的可选类型,需要我们解封。因为可选类型即使值不存在转化失败也不会导致程序报错,所以当我们在开发的时候最好使用这种方式进行转化,除非我们有百分之百的把握才可以使用强制转化