[英]What exactly does `: class` do in a protocol declaration?
這篇SO 帖子很好地解釋了如何解決創建weak
delegate
的問題。
本質上,有兩種方法:
使用@objc
關鍵字:
@objc protocol MyClassDelegate {
}
class MyClass {
weak var delegate: MyClassDelegate?
}
使用:class
關鍵字:
protocol MyClassDelegate: class {
}
class MyClass {
weak var delegate: MyClassDelegate?
}
我正在嘗試做一些研究,以了解這兩種方法之間的區別究竟是什么。 文檔對使用@objc
非常清楚:
要在 Objective-C 中訪問和使用,Swift 類必須是 Objective-C 類的后代,或者必須標記為
@objc
。
然而,我沒有找到一些關於:class
實際作用的信息。 仔細考慮整個概念,實際上並沒有多大意義。 我的理解是class
是 Swift 中用於聲明類的關鍵字。 因此,這里似乎我們將關鍵字class
本身用作協議(因為我們將它附加在協議聲明之后的:
之后)。
那么,為什么這甚至在語法上起作用,它究竟做了什么?
:class
確保只有類才能實現協議。 這是任何類,而不僅僅是NSObject
子類。 另一方面, @objc
告訴編譯器使用 Objective-C 風格的消息傳遞來調用方法,而不是使用 vtable 來查找函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.