簡體   English   中英

`:class` 在協議聲明中究竟做了什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM