Ios “:class”在协议声明中具体做什么?

Ios “:class”在协议声明中具体做什么?,ios,objective-c,swift,Ios,Objective C,Swift,这很好地解释了如何解决创建委托的问题,即弱 基本上有两种方法: 使用@objc关键字: @objc protocol MyClassDelegate { } class MyClass { weak var delegate: MyClassDelegate? } protocol MyClassDelegate: class { } class MyClass { weak var delegate: MyClassDelegate? } 使用:class关键字: @objc

这很好地解释了如何解决创建
委托的问题,即

基本上有两种方法:

使用
@objc
关键字:

@objc protocol MyClassDelegate {
}

class MyClass {
  weak var delegate: MyClassDelegate?
}
protocol MyClassDelegate: class {
}

class MyClass {
  weak var delegate: MyClassDelegate?
}
使用
:class
关键字:

@objc protocol MyClassDelegate {
}

class MyClass {
  weak var delegate: MyClassDelegate?
}
protocol MyClassDelegate: class {
}

class MyClass {
  weak var delegate: MyClassDelegate?
}
我正试图做一些研究,以了解这两种方法之间到底有什么区别。关于如何使用
@objc
,用户非常清楚:

要在Objective-C中访问和使用,Swift类必须是Objective-C类的后代,或者必须标记为
@objc

然而,我没有找到关于
:class
实际功能的信息。仔细考虑整个概念,它实际上没有太多意义。我的理解是,
class
是Swift中用于声明类的关键字。因此,这里我们似乎在使用关键字
本身作为协议(因为我们在协议声明之后附加了它)


那么,为什么这在语法上起作用?它到底起什么作用?

:class
确保只有类才能实现协议。这是任何类,而不仅仅是
NSObject
的子类<另一方面,code>@objc
告诉编译器使用Objective-C风格的消息传递给调用方法,而不是使用vtable来查找函数。

相关:也相关:在这种情况下可能也很有趣:(答案似乎是“无”)。@MartinR前两个链接的Q&a在我看来像是合适的dupe目标,那么,我是否应该投票赞成第一个方案,然后你用第二个方案愚弄hammer(我认为这两个方案都可以链接)?在Swift手册中查找“仅类协议”。非常感谢你的回答!您是否有任何(官方)资源来解释为什么我们可以在协议声明中使用
:class
?语法对我来说似乎很奇怪,我真的想多读一些关于这个的东西。你的意思是吗?哦,是的,这正是我想要的,谢谢!!