小编典典

如何在“纯”Swift 中进行弱协议引用(没有@objc)

all

weak引用似乎在 Swift 中不起作用,除非 aprotocol被声明为@objc,这是我在纯 Swift 应用程序中不想要的。

此代码给出编译错误(weak不能应用于非类类型MyClassDelegate):

class MyClass {
  weak var delegate: MyClassDelegate?
}

protocol MyClassDelegate {
}

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

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


阅读 118

收藏
2022-03-07

共1个答案

小编典典

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

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

class SomeClass {
    weak var delegate: ProtocolNameDelegate?
}

使用AnyObject你说只有类可以符合这个协议,而结构或枚举不能。

2022-03-07