这SO post很好地解释了如何解决创建 weak
的 delegate
的问题。
基本上,有两种方法:
使用@objc
关键字:
@objc protocol MyClassDelegate {
}
class MyClass {
weak var delegate: MyClassDelegate?
}
使用 :class
关键字:
protocol MyClassDelegate: class {
}
class MyClass {
weak var delegate: MyClassDelegate?
}
我正在尝试进行一些研究,以了解这两种方法之间的确切区别。 docs非常清楚如何使用 @objc
:
To be accessible and usable in Objective-C, a Swift class must be a descendant of an Objective-C class or it must be marked
@objc
.
但是,我在任何地方都找不到有关 :class
实际作用的信息。详细考虑整个概念,实际上并没有多大意义。我的理解是 class
是 Swift 中声明类的关键字。所以,这里似乎我们使用关键字 class
本身作为协议(protocol)(因为我们将它附加在 :
协议(protocol)声明之后)。
那么,为什么这甚至在句法上起作用,它究竟做了什么?
最佳答案
:class
确保只有类可以实现协议(protocol)。那是任何 类,而不仅仅是NSObject
的子类。另一方面,@objc
告诉编译器使用 Objective-C 风格的消息传递来调用方法,而不是使用 vtable 来查找函数。
关于ios - `: class` 在协议(protocol)声明中究竟做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40096030/