此SO post很好地解释了如何解决创建delegate
weak
的问题。
基本上,有两种方法:
使用@objc
关键字:
@objc protocol MyClassDelegate {
}
class MyClass {
weak var delegate: MyClassDelegate?
}
使用:class
关键字:
protocol MyClassDelegate: class {
}
class MyClass {
weak var delegate: MyClassDelegate?
}
我正在尝试进行一些研究,以了解这两种方法之间的差异究竟是什么。 docs非常清楚使用@objc
:
要在Objective-C中可访问和使用,Swift类必须是Objective-C类的后代,或者必须标记为
@objc
。
然而,我找不到有关:class
实际做什么的一些信息。从细节上考虑整个概念,它实际上并没有多大意义。我的理解是class
是Swift中用来声明类的关键字。所以,这里似乎我们使用关键字class
本身作为协议(因为我们在协议声明后的:
之后附加它)。
那么,为什么这甚至在语法上起作用,它究竟是做什么的呢?
答案 0 :(得分:5)
>>> (bool_sliced_idx1==True).index
Int64Index([0, 1, 5, 8], dtype='int64')
确保只有类可以实现协议。这就是任何类,而不仅仅是:class
的子类。另一方面,NSObject
告诉编译器使用Objective-C样式的消息传递来调用方法,而不是使用vtable来查找函数。