Any & AnyObject


Any& AnyObject



  • 见到Any ,可以想到 Objectiv-C 中的 id ,在讨论AnyObject之前,Any没有什么好说的, 而AnyObject 又是什么玩意儿呢?
  • AnyObject ,可以理解为存在于一个具体对象如(譬如:UILabel、Array、String、NSDate、) 和 Any之间的存在,它既可以窥视到具体对象的方法,又可以用来泛指任意类型对象。一把栗子:

        var myObject: AnyObject = UITableViewCell()

        myObject = NSData()

        let futureDate      = myObject.addingTimeInterval(10)

        let charOne         = myObject.character(at: 5)

        let index              = myObject.index(of: "hahaha")

        let subView         = myObject.subviews.first

        let key                 = myObject.allKeys.first

     上面这些都是可以编译通过的,可以直观来理解 AnyObject 的效果


  • 无聊时 Any 还是 AnyObject 终究不是一个具体的对象,那应该如何进行转换呢? Swift中转换类型有这种:{ let arrV:Array = [“1”,"2","3"]  let floatV:CGFloat = CGFloat(arrV.count)  }  ,还有一种最常用关键字 {as?  ||  as!||as  } 那么怎么使用呢,还是上面一段代码,略作调整之后,如果要达到编译不出错的效果就会如此:

        var myObject: Any = UITableViewCell()

        myObject = NSData()

        let futureDate      = (myObjectas AnyObject).addingTimeInterval(10)

        let charOne         = (myObjectas AnyObject).character(at: 5)

        let index           = (myObjectas AnyObject).index(of: "hahaha")

        let subView         = (myObjectas AnyObject).subviews.first

        let key             = (myObjectas AnyObject).allKeys.first


  • 通过上面这样子,大概知晓,AnyObject 其实是提供了一个试探性调用方法的机会,当时需要明白,AnyObject对应的对象只有在运行时才能知晓,如果不小心引用了错误的方法,会在运行时候导致崩溃的。如果不能确定使用as关键字装换过去的具体对象确实就是AnyObject接受到的对象,那么最好是用as?判空一下,如果能够确定,那么直接使用as!可矣。譬如

let object2 :AnyObject?   = NSClassFromString(className)

        if (object2 as? UILabel.Type) != nil {

            return  .viewTypeLabel

         }














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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值