Swift入坑--Any、AnyObject、AnyClass有什麼區別

來源:互聯網
上載者:User

標籤:

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<>的別名。

Swift入坑--Any、AnyObject、AnyClass有什麼區別

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.