Swift中的Any 與 AnyObject、AnyClass的區別?


在 Swift 中能夠表示 “任意” 這個概念的除了Any 、AnyObject以外,還有一個AnyClass

Any、AnyObject、AnyClass有什么區別:

  1. AnyObject是一個成員為空的協議,任何對象都實現了這個協議。
  2. Any是一個空協議集合的別名,它表示沒有實現任何協議,因此它可以是任何類型,包括類實例與結構體實例。
  3. 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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM