Swift as类型转换操作符使用详解

这里总结一下as、as!、as?这三种类型转换操作符的异同以及使用场景。

1. as使用场合

(1)从派生类转换为基类,向上转型

class Animal {}

class Cat : Animal{}

let cat = Cat()

let animal = cat as Animal

(2)消除二义性,数值转换类型

let num1 = 43 as CGFloat

let num2 = 45.3 as Int

2.as!使用场合

向下转型时使用。由于是强制类型转换,如果转换失败会报runtime运行错误。

class Animal {}

class Cat:Animal{}

let animal:Animal = Cat();

let cat = animal as! Cat

3.as?

as?和as!的使用规则完全一样,但是as?如果转换不成功就会返回一个nil对象。成功的话就返回可选类型值(optional),需要我们拆包使用。

由于as?在转换失败的时候也不会出现错误,所以对于能确保100%会成功的转换可以使用as!,否则使用as?

let animal:Animal = Cat()

if let cat = animal as? Cat{

print("cat is not nil")

}else{

print("cat is nil");

}

你可能感兴趣的:(Swift as类型转换操作符使用详解)