【问题标题】:What exactly does `: class` do in a protocol declaration?`:class` 在协议声明中究竟做了什么?
【发布时间】:2017-02-27 00:09:21
【问题描述】:

这个SO post 很好地解释了如何解决创建delegateweak 的问题。

基本上有两种方法:

使用 @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 本身作为协议(因为我们在协议声明后的 : 之后附加它)。

那么,为什么这在语法上甚至可以工作,它到底是做什么的?

【问题讨论】:

标签: ios objective-c swift


【解决方案1】:

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

【讨论】:

  • 非常感谢您的回答!您是否有任何(官方)资源来解释为什么我们可以在协议声明中使用: class?语法对我来说似乎很奇怪,真的很想阅读更多关于这个的内容。
  • 你的意思是Apple's Swift documentation
  • 哦,是的,这正是我想要的,谢谢!!
猜你喜欢
  • 2010-09-08
  • 2011-06-18
  • 2012-07-23
  • 2016-09-10
  • 2023-03-15
  • 2012-10-17
  • 2021-06-04
  • 1970-01-01
  • 2018-07-30
相关资源
最近更新 更多