解释了如何解决创建delegateis 的问题weak。
delegate
weak
本质上,有两种方法:
使用@objc关键字:
@objc
@objc protocol MyClassDelegate { } class MyClass { weak var delegate: MyClassDelegate? }
使用:class关键字:
:class
protocol MyClassDelegate: class { } class MyClass { weak var delegate: MyClassDelegate? }
我正在尝试进行一些研究,以了解这两种方法之间的确切区别。该文档非常清楚有关使用@objc:
为了在Objective-C中可访问和使用,Swift类必须是Objective-C类的后代,或者必须将其标记为@objc。
但是,在任何地方我都找不到有关:class实际操作的信息。详细考虑整个概念,实际上并没有多大意义。我的理解是,这class是Swift中用于声明类的关键字。因此,在这里好像我们正在使用关键字class本身作为协议(因为我们在:协议声明之后追加了关键字)。
class
:
那么,为什么这甚至在语法上也起作用,它到底是做什么的呢?
:class确保只有类才能实现该协议。那就是 任何 类,而不仅仅是的子类NSObject。@objc另一方面,告诉编译器使用Objective- C样式的消息传递来调用方法,而不是使用vtable查找函数。
NSObject