TypeCast Any AnyObject

/* TypeCase 

1.downcast 向下转换将一个父类类型的变量(可能本来时子类类型,在之前的运算中被转换成父类)

转换为子类类型的变量

2.upcast 与之相反。

3.不是继承关系的类不可以转换。

4.as as? 的区别:as?返回的时optional的。as可以向上转换也可以向下


AnyObject 可以任何类的类型的实例,由于OC没有指定类型的数组,所以swiftOC传递数组时,需要转换成此类型。

Any可以代替除了函数类型以外的任意类型可以用Any来定义任意类型的数组


注意AnyObject只能时类实例,而Any可以是任意的类型(除函数)

5.可以在switch中用isas操作

*/


class Animal

{

   var caneat = true

}


class Bird: Animal

{

   var canfly = true

}


class Fish: Animal

{

   var canswim = true

}


var a =Animal()

var b =Bird()


// if a is Bird 这个是恒等于false

// if b is Bird 这个是恒等于true的。

// if b is Animal //编译错误


//在定义下面的数组时,arry被推导为Animal类型的数组,因为Bird也是Animal的子类。

var arry = [Fish(),Bird()]

for i in arry

{

   if i is Fish

    {

       println("fish")

    }

   else if i is Bird

    {

       println("Bird")

    }

   else

    {

       println("other")

    }

}


//类型强转,子类转化为父类

println(b.canfly)

var c = b as Animal

//println(c.canfly) 转化后就成了父类的类型,不再拥有属性canfly

var d = cas Bird //转换后可以转换回来

println(d.canfly)


//var f = b as Fish 不是继承关系的类不可以转换。


// as as? 的区别:as?返回的时optional的。

var f = arry[1] asFish

if f != nil //beta5之后不能用if nil的语句啦。

{

    println("optional f is Fish")

}

else

{

    println("optional f is not Fish")

}


// 由于OC没有指定类型的数组,所以swiftOC传递数组时,需要转换成AnyObject的。

var myAnyArray:[AnyObject] = [Fish(),Fish()] //两个Fish变量的数组

//在还原时,如果确信都是Fish则可以用as,如果不确信则可以用as

for item in myAnyArray

{

    println("In my AnyArray item can swim\((item as Fish).canswim)")

}


//可以在switch中用isas操作,Any定义任意类型的数组

var anyTypeArray:[Any] = [0, 0.0,Fish(), "Hello"]

for item inanyTypeArray

{

   switch item

    {

    caseas Int://如果不需要获取变量可以直接这样写

       println("Int var")

    case let d as Double://需要截获变量的写法

        println("Double var is\(d)")

   case let m as Fish:

        println("Fish can swim")

    default:

       println("other")

    }

}

//《完》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值