any和anyObject

一個蘿蔔壹個坑發表於2017-12-22

AnyObject 可以代表任何class型別的例項

Any可以表示任何型別,甚至是包含funcfan方法的型別

在OC 中有一個叫做id的。編譯器不會向宣告為id的變數進行型別檢查,他可以表示任意類的例項這樣的概念。在swift中使用AnyObject在任意class型別AnyObject代替。

兩者還是有區別的,在swift中編譯器不僅不會對Anyobject例項的方法呼叫做出檢查,甚至對於anyobject的所有方法呼叫都會返回Optional的結果。有時這樣使用會很危險。

所有的class都隱藏的實現了一個介面,protocol AnyObject{  

} 這個介面,這也是Anyobject只適用class類,而在swift中所有的基本型別,包含陣列和字典,這些傳統意義的的class的東西,統統都是struct型別,並不能有AnyObject來表示,於是Apple提出了更為特殊的Any,除了class以外,它還可以表示包括struct 和enum。

相關文章