在 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/