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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 132.转换错误成可选值 通过转换错误成一个可选值,你可以使用 try? 来处理错误。当执行try?表达式时,如果...
    无沣阅读 5,130评论 0 3
  • 基础部分(The Basics) 当推断浮点数的类型时,Swift 总是会选择Double而不是Float。 结合...
    gamper阅读 5,211评论 0 7
  • Swift 3.0 和 Swift 2.0 写法对比 Any和AnyObject 这两个类型都是Swift中很早就...
    飘金阅读 4,147评论 0 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,464评论 1 10
  • 当我打开了指南针找方向,我看到底下的数字一直在变,好像我此刻就存在于这一个点,经度多少,纬度多少。当我在走,数字时...
    枝楼阅读 2,744评论 0 0

友情链接更多精彩内容