Any vs AnyObject vs NSObject in swift3

这里说的swift都是指swift3的环境。
swift是一门类型安全的语言,并且支持类型推断
类型推断:顾名思义,只能推断类型,不能推断协议

1.
class TestObj{}
TestObj() is NSObject //false
2.
class TestObj1:NSObject{}
TestObj1() is NSObject //true

swift是没有隐式继承NSObject的根节点,除非显示继承。OC存在

  1. Any是一个空协议集合的别名,它表示没有实现任何协议,因此它可以是任何类型

  2. AnyObject是一个成员为空的协议,任何对象都实现了这个协议

  3. NSObject就是一个基类,不过只有在OC中才隐式继承

let test = ["a",0] //error ,不能推导出类型
let test:[Any] = ["a",0] //显示声明协议,类似java的泛型向上转型
let test = ["a" as NSString,0 as NSNumber] //类型推导出NSObject,显示转型为OC的类型了
protocol cc {}
class TestObj:cc{}
class TestObj1:NSObject,cc{}
let bb:[cc] = [TestObj(),TestObj1()]

总结:

Any是零个协议,任何变量都实现了这个协议
AnyObject是一个协议,任何都实现了这个协议
类型推导泛型贯穿的思想

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容