在 Swift 中能夠表示 “任意” 這個(gè)概念的除了Any 、AnyObject以外,還有一個(gè)AnyClass。
Any、AnyObject、AnyClass有什么區(qū)別:
Any是一個(gè)空協(xié)議集合的別名,它表示沒(méi)有實(shí)現(xiàn)任何協(xié)議,因此它可以是任何類型,包括類實(shí)例與結(jié)構(gòu)體實(shí)例。
AnyObject是一個(gè)成員為空的協(xié)議,任何對(duì)象都實(shí)現(xiàn)了這個(gè)協(xié)議。
AnyClass是AnyObject.Type的別名而已。
1.AnyObject
本身就是一個(gè)接口,而且所有的class都隱式的實(shí)現(xiàn)了這個(gè)接口,這也限制了AnyObject是只適用于Class類型的原因。
AnyObject有什么用呢?
有過(guò)Objective-C開(kāi)發(fā)經(jīng)驗(yàn)的人肯定知道id, 它可以表示任意類的實(shí)例, 編譯器不會(huì)對(duì)向聲明為 id 的變量進(jìn)行類型檢查.而 Swift為了與 Cocoa 架構(gòu)進(jìn)行協(xié)作開(kāi)發(fā),就將原來(lái)的id用 AnyObject 來(lái)進(jìn)行替代。
2.Any
既然AnyObject是只適用于Class類型 ,那swift中的所有基本類型怎么辦,這個(gè)時(shí)候呢Any就幫上忙了
Any不僅僅能夠容括class類型 ,說(shuō)得更直白一點(diǎn), 就是所有的類型都可以用Any表示, 包括基本數(shù)據(jù)類型, enum, struct, func(方法)等等.
3.AnyClass:
屬于AnyObject.Type的別名:typealias AnyClass = AnyObject .Type
表示任意類的元類型,任意類的類型都隱式遵守這個(gè)協(xié)議.