Swift入坑--Any、AnyObject、AnyClass有什么区别

Any:

Any是一个空协议集合的别名,它表示没有实现任何协议,因此它可以是任何类型,包括类实例与结构体实例。

Any是一个别名。

/// 一个任何类型都遵守的协议类型

typealias Any = protocol<>

AnyObject:

AnyObject是一个成员为空的协议,任何对象都实现了这个协议。

看一下AnyObject的定义:

@objc protocol AnyObject {

}

AnyClass:

AnyClass是AnyObject.Type的别名而已。

看一下AnyClass的定义:

typealias AnyClass = AnyObject.Type

@objc是一个声明特性,该特性用于修饰任意可以在ObjC中访问或使用的声明,比如非嵌套类,协议,类和协议中的属性和方法,初始化器,析构器,以及下标。如果你将objc特性应用于一个类或协议,它也会隐式地应用于那个类或协议的成员。对于标记了objc特性的类,编译器会隐式地为它的子类添加objc特性。

AnyObject使用@objc声明特性修饰,是因为它要做为Objc与Swift混编的使者,两者传递变量很多类型便是AnyObjct。

不同于Any,AnyObject是一个没有声明任何成员的空协议,是Any表示一个空的协议集合。

总结:

AnyObject是一个协议,Any是零个协议!

AnyObject用于任何类实例,而Any用于任何变量。

看一下AnyObject的定义:

@objc protocol AnyObject {

}

看一下AnyClass的定义:

typealias AnyClass = AnyObject.Type

AnyClass-它确实仅是一个别名而已。Any也是别名,是protocol<>的别名。

时间: 2024-11-09 03:45:13

Swift入坑--Any、AnyObject、AnyClass有什么区别的相关文章

Swift入坑系列—集合类型

数组(Arrays) 字典(Dictionaries) 数组(Arrays) 在OC里面,NSArray和NSMutableArray这两个类可以存储任意类型的对象,并且不提供所返回对象的任何特别信息.在Swift中,数据值被存入某个数组之前类型必须明确.方法是通过显式的类型标注或者类型推断,而且不是必须是class类型. //定义了一个存储 字符串类型 的可变数组('var'字段修饰) var shoppingList: [String] = ["Eggs", "Milk&

Swift入坑[email&#160;protected]

在Swift中@selector 直接用 "methodName" 就可以了,如果后面有参数记得加上冒号 "methodName:" "does not implement methodSignatureForSelector: -- trouble ahead" "does not implement doesNotRecognizeSelector: -- abort" 如果发生了这两个错误记得给基类加上 NSObject

Swift入坑--block的定义

typealias methodCompletionBlock = (String)->Void

在Swift语言中,关于Any,AnyObject,AnyClass的区别与联系

在Swift语言中,协议定义类或结构体应该遵守的变量和方法集合,如下所示,这个一个标准的协议的声明: protocol NSObjectProtocol { func isEqual(object: AnyObject?) -> Bool var hash: Int { get } var superclass: AnyClass? { get } func `self`() -> Self! func isProxy() -> Bool func isKindOfClass(aClas

弃坑pexpect,入坑paramiko

弃坑pexpect,入坑paramiko 上文书说到,ssh库pexpect的使用,简直就是个"月亮公主"--满眼全是坑.勉强把程序写好了,跑起来的时候发现了一个新坑,让我不可抗拒的把它弃掉了--经常莫名其妙的连不上服务器!开线程连接14台服务器,总有1到3台连不上,还查不到原因.这还了得!一怒之下把写好的pexpect封装库删掉了,用paramiko重新写起.其实这个库也是有一些坑的,这个放在后面说.先介绍一下这个库的用法. 安装方法:没有什么新鲜的 pip install para

py3学习笔记0(入坑)

什么是Python? Python是一种面向对象.解释型计算机程序设计语言,语法简洁,具有很多强大的库.它也被称为胶水语言,能够把其他语言制作的库轻松地粘合在一起.现常用于科学计算,界面设计,网络通信等. 它优雅,明确,简单,将“用一种方法,最好是只有一种方法来做一件事”的优雅哲学贯穿始终. 当然关键还是它比较好玩,就抱着玩一玩的心态入坑看看咯. 初期学的是py2,主要写写小游戏,爬虫什么的. 在学校很久没有编程了,平时还是要写写代码练练手. 那就开始学py3吧!虽然都差不多,但周围有好多人都想

ReactNative for Android入坑(一)

最近找工作发现有些公司要求会ReactNative,决定入坑. 搭建环境:官网详细的教程附链接. 坑一:FQ,建议整个搭建过程中FQ.第一步:安装Chocolatey,管理员运行cmd,输入指令: Chocolatey安装官网指令:@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org

VPS 入坑之路

一.入坑动机: 以前一直的FQ服务也被请喝茶了,仅限企业客户使用.于是想到租用一个VPS,搭个梯子. 二.入坑之路: 1.购买 想起在G+看见有人推荐搬瓦工性价比很高,去了解了一下,最低配置19.99刀一年,折合人民币也就十块一个月的样子,果断入之. 2.SS 以前在虚拟机稍微接触过linux,比如ubuntu和fedora,然而都是在图形界面瞎搞.这次终于有机会在终端操作了.各种命令上手确实不容易,只会cd,ls...突然发现控制面板有一键搭建SS,后来又放弃了敲命令...有一天心血来潮,决定

猿说摄影(上)--入坑指南

最近师弟师妹们以及复读的童鞋临近毕业,有的想买相机拍拍毕业照,记录一下旅行毕业游之类的.五一放假,咱就先不聊技术,聊一下摄影,不过摄影也是一个技术活,而且烧钱.摄影穷三代,单反毁一生.相机贵吗?贵,但贵的不只是相机,还有镜头.为什么这么说呢?大家也知道,单反和微单都是可以更换镜头的.一旦入坑,除了买相机同时买的套头(标准变焦镜头)之外,你很可能会接下来陆陆续续地买其它镜头→_→想拍漂亮的人物,你需要大光圈的定焦镜头:想拍壮阔的风景,你需要广角镜头:想拍飞禽走兽,你需要长焦镜头:你可能还要拍点小花