【问题标题】:Trying to understand something with Swift protocols试图用 Swift 协议理解一些东西
【发布时间】:2017-12-02 09:13:57
【问题描述】:

我最近继承了一个用 Swift 编写的完全没有文档的、意大利面条式的、漏洞百出的项目。

我在这里和那里整理了一些东西,并在每个协议声明中都遇到了这一点:

protocol SomeProtocol: class { ...

就像字面上的: class - 这不是其他东西的占位符。

我的问题是:: class 实现或声明了什么?

我个人之后从来没有放过: class,我通常保留它以从其他协议继承。我删除了一对没有结果,但我认为我应该在继续之前检查实际目的(如果有的话)。

最好的问候,

弗兰基

【问题讨论】:

  • 这意味着你的协议只能由类实现
  • 只搜索“类协议”
  • 谢谢(和链接),我试图找到类似的问题,但我的措辞是错误的。该项目中的大部分类都将转换为结构,因此现在可以进行相应的重构。

标签: ios swift swift4 swift-protocols


【解决方案1】:

: class 表示这个协议只能被一个类遵守。

其中一个用例是委托。 delegate 属性通常声明为 weak 以避免保留循环。例如:

class MyCoolClass {
    weak var delegate: MyCoolClassDelegate?
}

如果MyCoolClassDelegate 声明如下:

protocol MyCoolClassDelegate { }

那么结构也可以符合它。但是结构类型不能声明weak!所以会出现这个错误:

'weak' 只能应用于类和类绑定协议类型,而不是 'MyCoolClassDelegate'

这就是为什么您需要将其声明为: class

【讨论】:

  • 吹毛求疵:"...通过引用类型,即类。" - 引用类型和类不是同义词,闭包也是引用类型。类协议只能被类采用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多