一尘不染

如何在“纯” Swift中创建弱协议引用(不带@objc)

swift

weak除非a protocol声明为@objc,否则引用似乎在Swift中不起作用,我不希望在纯Swift应用程序中使用它。

这段代码给出了一个编译错误(weak不能应用于非类类型MyClassDelegate):

class MyClass {
  weak var delegate: MyClassDelegate?
}

protocol MyClassDelegate {
}

我需要给协议加上前缀@objc,然后它才能工作。

问题:什么是完成Swift的“纯” Swift方法weak delegate


阅读 275

收藏
2020-07-07

共1个答案

一尘不染

您需要将协议类型声明为AnyObject

protocol ProtocolNameDelegate: AnyObject {
    // Protocol stuff goes here
}

class SomeClass {
    weak var delegate: ProtocolNameDelegate?
}

AnyObject你的话说,只有类才能符合此协议,而结构或枚举则不能。

2020-07-07