一尘不染

`:class`在协议声明中到底做了什么?

swift

解释了如何解决创建delegateis 的问题weak

本质上,有两种方法:

使用@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

但是,在任何地方我都找不到有关:class实际操作的信息。详细考虑整个概念,实际上并没有多大意义。我的理解是,这class是Swift中用于声明类的关键字。因此,在这里好像我们正在使用关键字class本身作为协议(因为我们在:协议声明之后追加了关键字)。

那么,为什么这甚至在语法上也起作用,它到底是做什么的呢?


阅读 202

收藏
2020-07-07

共1个答案

一尘不染

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

2020-07-07