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