any和anyObject
2016-07-02 本文已影响52人
傻傻小萝卜
AnyObject 可以代表任何class类型的实例
Any可以表示任何类型,甚至是包含funcfan方法的类型
在OC 中有一个叫做id的。编译器不会向声明为id的变量进行类型检查,他可以表示任意类的实例这样的概念。在swift中使用AnyObject在任意class类型AnyObject代替。
两者还是有区别的,在swift中编译器不仅不会对Anyobject实例的方法调用做出检查,甚至对于anyobject的所有方法调用都会返回Optional的结果。有时这样使用会很危险。
所有的class都隐藏的实现了一个接口,protocol AnyObject{
} 这个接口,这也是Anyobject只适用class类,而在swift中所有的基本类型,包含数组和字典,这些传统意义的的class的东西,统统都是struct类型,并不能有AnyObject来表示,于是Apple提出了更为特殊的Any,除了class以外,它还可以表示包括struct 和enum。