在协议声明中,`:class`是做什么的?
这个SOpost很好地解释了如何解决创buildweak
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
。
然而,我没有find一些关于什么的信息:class
实际上是这样做的。 仔细考虑整个概念,实际上并没有什么意义。 我的理解是, class
是Swift中的一个关键字来声明类。 所以,在这里,我们似乎将关键字class
本身用作协议(正如我们在协议声明之后追加它)。
那么,为什么这个语法甚至在语法上起作用呢?它究竟做了什么?
:class
确保只有类可以实现协议。 这是任何类,不只是NSObject
子类。 另一方面, @objc
告诉编译器使用Objective-C风格的消息传递来调用方法,而不是使用vtable来查找函数。