一尘不染

在Swift中,协议从class关键字继承意味着什么?

swift

在Swift中,协议从class关键字继承意味着什么?

例如

protocol MyDelegate: class {

}

阅读 434

收藏
2020-07-07

共1个答案

一尘不染

红蜘蛛 的答案的要旨是正确的,但它错过了我认为很重要的原因_ 。它取决于ARC和内存管理。

Swift是引用类型和值类型的语言。类_是引用类型,而其他所有类型都是值类型。实际上,我们并没有真正指定该协议是从… _继承
而来class的,更像是我们指定该协议只能由 引用类型 实现。

为什么这么重要?

这很重要,因为没有它,我们将无法weak在协议中使用关键字。

protocol ExampleProtocol {}

class DelegatedClass {
    weak var delegate: ExampleProtocol?
}

这会产生错误:

“弱”不能应用于非类类型“ ExampleProtocol”

在此处输入图片说明

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

2020-07-07