Swift--Any和AnyObject的区别

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传值出去。

你可能感兴趣的:(Swift--Any和AnyObject的区别)