在Swift中,协议从类关键字继承是什么意思?

Boo*_*oon 6 protocols swift

在Swift中,协议从类关键字继承是什么意思?

例如

protocol MyDelegate: class {

}
Run Code Online (Sandbox Code Playgroud)

nhg*_*rif 14

的要点红蜘蛛的答案是正确的,但它忽略了为什么我认为这是重要的在这里.它归结为ARC和内存管理.

Swift是引用类型和值类型的语言. 是引用类型,而其他所有都是值类型.实际上,我们并没有真正指定协议继承class......它更像是我们指定协议只能通过引用类型实现.

为什么这很重要?

这很重要,因为没有它,我们就不能weak在协议中使用关键字.

protocol ExampleProtocol {}

class DelegatedClass {
    weak var delegate: ExampleProtocol?
}
Run Code Online (Sandbox Code Playgroud)

这会生成错误:

'weak'不能应用于非类类型'ExampleProtocol'

在此输入图像描述

那么为何不?因为weak关键字仅适用于ARC适用的引用类型.ARC不适用于值类型.如果没有指定我们的协议class,我们不能保证我们的delegate属性设置为引用类型.(如果我们不使用weak,我们很可能会创建一个保留周期.)