2018.10.26更新(主要对一些概念不明确的说明)
虽然使用swift开发了一段时间,但是感觉对一些基础的东西了解不是比较透彻,在查询了许多资料以后还是打算自己动手记录一下,好记性不如烂笔头!
在官方的文档中,对Any和AnyObject是这么定义的:
AnyObject:可以代表任何class类型的实例;
Any:可以代表任何类型,甚至包括方法(func)类型。
接下来看下二者的定义
/// The protocol to which all types implicitly conform.
///所有类型隐式一致的协议
public typealias Any = protocol<>
/// The protocol to which all classes implicitly conform.
///所有类隐式一致的协议
@objc public protocol AnyObject {
}
从以上可以看出Any和AnyObject都是协议而且,并且从Apple提供的注释中可以看出所有的type(类型)都隐式实现了Any协议,所有的class都隐式实现了AnyObject协议。
可以总结为:
- AnyObject是Any的子集
- 所有用class关键字定义的对象就是AnyObject
- 所有不是用class关键字定义的对象就不是AnyObject,而是Any
下面来举例说明:
1.Any -- 比如我们经常使用的参数parameters
parameters = ["appId":"123456", "timestamp":203428394820,
"version":"1.0", "bizContent":["pageStart":1, "pageSize": "10","isTrue":true]] as [String : Any]
***Int String Array 等都是Struct
这里面包括了String,Int,Bool,Dictionnary四种类型的参数,最后使用as [String : Any] ,就是说,parameters的key是String类型,但是value值可以是任何类型。
2.AnyObject -- 比如你定义一个Person类,在另一个Sport类里面实例化Person
**Sport类中
let p = Person()
//定义一个数组
var array:[AnyObject] = []
array.append(p)
可以看到,在返回的json进行回调的时候,由于value是JSON类型的实例,complicate(value as AnyObject), 就是将value作为AnyObject传值出去。