这里说的
swift都是指swift3的环境。
swift是一门类型安全的语言,并且支持类型推断
类型推断:顾名思义,只能推断类型,不能推断协议
1.
class TestObj{}
TestObj() is NSObject //false
2.
class TestObj1:NSObject{}
TestObj1() is NSObject //true
swift是没有隐式继承NSObject的根节点,除非显示继承。OC存在
Any是一个空协议集合的别名,它表示没有实现任何协议,因此它可以是任何类型AnyObject是一个成员为空的协议,任何对象都实现了这个协议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是一个协议,任何类都实现了这个协议
类型推导和泛型贯穿的思想