as、as!、as?三种类型转换操作符使用详解

http://www.hangge.com/blog/cache/detail_1089.html

1.as使用场合

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

 class Animal{}

 class Cat: Animal{}

 let cat = Cat()

 let animal = cat as Animal


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

  let num1 = 42 as CGFloat

  let num2 = 42 as Int

  let num3 = 42.5 as Int

  let num4 = (42/2) as Double


(3)swift语句中进行模式匹配

switch animal{

     case let cat as Cat :      print("cat为Cat类型对象")

     case let cat as Dog :     print("cat为Dog类型对象")

}

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")

}

你可能感兴趣的:(移动开发,ios,swift)