Swift中的Any 与 AnyObject、AnyClass的区别?
在 Swift 中能够表示 “任意” 这个概念的除了Any 、AnyObject以外,还有一个AnyClass
。
Any、AnyObject、AnyClass有什么区别:
- AnyObject是一个成员为空的协议,任何对象都实现了这个协议。
- Any是一个空协议集合的别名,它表示没有实现任何协议,因此它可以是任何类型,包括类实例与结构体实例。
- AnyClass是AnyObject.Type的别名而已。
1.AnyObject
本身就是一个接口,而且所有的class都隐式的实现了这个接口,这也限制了AnyObject是只适用于Class类型的原因。
AnyObject有什么用呢?
有过Objective-C开发经验的人肯定知道id
, 它可以表示任意类的实例, 编译器不会对向声明为 id 的变量进行类型检查.而 Swift为了与 Cocoa 架构进行协作开发,就将原来的id用 AnyObject 来进行替代。
2.Any
既然AnyObject是只适用于Class类型 ,那swift中的所有基本类型怎么办,这个时候呢Any就帮上忙了
Any不仅仅能够容括class类型 ,说得更直白一点, 就是所有的类型都可以用Any
表示, 包括基本数据类型, enum, struct, func(方法)等等.
3.AnyClass:
属于AnyObject.Type的别名:typealias AnyClass = AnyObject .Type
表示任意类的元类型,任意类的类型都隐式遵守这个协议,一般我们使用不多
总结的理解:
1. AnyObject :代表任何class类型的对象实例。
2. Any :范围更广,代表除函数外任何类型的实例。不仅包含object对象,还包含基本类型。
3. AnyClass:使用不多,更多体现在系统内的使用。
参考文献:http://swifter.tips/self-anyclass/
Swift中的Any 与 AnyObject、AnyClass的区别?的更多相关文章
- Swift关于Any,AnyObject,AnyClass的区别与联系
在Swift语言中,协议定义类或结构体应该遵守的变量和方法集合,如下所示,这个一个标准的协议的声明: protocol NSObjectProtocol { func isEqual(object: ...
- swift中Any,AnyObject,AnyClass的区别
这几个概念让人很迷惑,看了很多帖子,终于搞明白了,简单总结: Any 和 AnyObject 是 Swift 中两个妥协的产物.什么意思呢,oc中有个id关键字,表示任何对象,oc和swift混编的时 ...
- Swift微博项目--Swift中通过类名字符串创建类以及动态加载控制器的实现
Swift中用类名字符串创建类(用到了命名空间) OC中可以直接通过类名的字符串转换成对应的类来操作,但是Swift中必须用到命名空间,也就是说Swift中通过字符串获取类的方式为NSClassFro ...
- 【iOS】在Swift中使用JSONModel
前言 首先所有的Model还是使用oc来写——看到这一句是不是想关网页了- - #,在swift里面直接写一直报错所以就将就用oc来写了,这里主要是分享一下搭配Alamofire使用的经验. 声明 欢 ...
- Swift基础--Swift中的异常处理
Swift中的异常处理 OC中的异常处理:方法的参数要求传入一个error指针地址,方法执行完后,如果有错误,内部会给error赋值 Swift中的异常处理:有throws的方法,就要try起来,然后 ...
- 在Swift中使用JavaScript的方法和技巧
本文作者Nate Cook是一位独立的Web及移动应用开发者,是继Mattt大神之后NSHipster的主要维护者,也是非常知名活跃的Swift博主,并且还是支持自动生成Swift在线文档的Swift ...
- 使用swift 中的注意,不断完善中
1. 应该充分利用swfit的新特性 比如如果按照oc里的习惯,调用一个delegate中都optional函数应该这样写 if delegate != nil && delegate ...
- 记OC迁移至swift中笔记20tips
写久了OC后来写swift,总感觉写着是swift的皮毛,但是实际上是OC的核心,这里整理了OC迁移至swift中的一些小细节. 1 在当前类中,实例方法调用属性以及方法都可以将self省略掉,而且是 ...
- Swift面向对象基础(上)——Swift中的类和结构体(上)
学习来自<极客学院> import Foundation //1.定义类和结构体 /* [修饰符]calss 类名{ 零到多个构造器 零到多个属性 零到多个方法 零到多个下标 } 修饰符可 ...
随机推荐
- Context Application 使用总结 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- axios post提交的Content-Type
使用axios的坑 jQuery.ajax的post提交默认的请求头的Content-Type: application/x-www-form-urlencoded而axios.post提交的请求头是 ...
- Android -- onMeasure
onMeasure调用次数 当Activity获取焦点的时候,它就需要绘制布局.Android框架会处理绘制过程,但这个Activity必须提供它布局树的根节点. 绘制过程是从布局的根节点开始的.这个 ...
- object-c 混编 调用C,C++接口
xcode 支持 object-c 混编,在object-c 中调用c,c++接口 第一步 定义c语言 接口(File.c) #include <stdio.h> void printsB ...
- [Functional Programming] Running though a serial number prediction functions for tagging, pairing the result into object
Let's we have some prediction functions, for each prediction function has a corresponding tag: const ...
- chrome插件编写基本入门
chrome插件编写基本入门 http://igeekbar.com/igeekbar/post/331.htm #精选JAVASCRIPTCHROME 作为一名程序猿,怎么能不会写chrome插件 ...
- Andorid 翻书效果
本文内容 项目结构 环境 演示 参考资料 翻书效果,主要采用绘制贝塞尔曲线的方法.本文有三个演示: 简单翻书效果.翻下一页后,当前页不会消失. 翻书时的贝塞尔曲线.演示翻书时,贝塞尔曲线的路径和要素. ...
- Windows 下 Git 安装与初始配置
官方下载地址:https://git-scm.com/download/win,我下载的最新版是 Git-2.15.1.2-64-bit.exe . Windows 下安装步骤 1.相关信息,直接“ ...
- uni/微信小程序 - 使用字体图标
阿里字体图标:http://www.iconfont.cn/home/index?spm=a313x.7781069.1998910419.2 1.单个/ 多个选择字体图标 2. 导入字体库 可以参考 ...
- 树莓派系统(Debain)中设置SSH服务开机自启动
一.方式: 禁用命令:sudo update-rc.d ssh disable 启用命令:sudo update-rc.d ssh enable 二.chkconfig的方式: 1.安装:apt-ge ...