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
?语法对我来说似乎很奇怪,我真的想多读一些关于这个的东西。你的意思是吗?哦,是的,这正是我想要的,谢谢!!