在Swift中,协议从class关键字继承意味着什么?
例如
protocol MyDelegate: class { }
红蜘蛛 的答案的要旨是正确的,但它错过了我认为很重要的原因_ 。它取决于ARC和内存管理。
Swift是引用类型和值类型的语言。类_是引用类型,而其他所有类型都是值类型。实际上,我们并没有真正指定该协议是从… _继承 而来class的,更像是我们指定该协议只能由 引用类型 实现。
class
为什么这么重要?
这很重要,因为没有它,我们将无法weak在协议中使用关键字。
weak
protocol ExampleProtocol {} class DelegatedClass { weak var delegate: ExampleProtocol? }
这会产生错误:
“弱”不能应用于非类类型“ ExampleProtocol”
那么为何不?因为该weak关键字仅对ARC适用的引用类型有意义。ARC不适用于值类型。而且,如果不使用指定协议class,我们就不能保证将delegate属性设置为引用类型。(如果不使用weak,则很可能会创建一个保留周期。)
delegate