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是一个协议,任何都实现了这个协议
类型推导泛型贯穿的思想

你可能感兴趣的:(Any vs AnyObject vs NSObject in swift3)