Avatar ·

如何在纯Swift中创建对协议的弱引用(不使用@objc)

大家好!我正在学习Swift,并尝试实现委托模式,但遇到了内存泄漏的问题。我有一个协议: ```swift protocol MyDelegate: class { func didSomething() } class MyClass { var delegate: MyDelegate? func doSomething() { delegate?.didSomething() } } ``` 我知道在Objective-C中,可以对标记为`@objc`的协议使用`weak`。但我想用纯Swift编写。当我尝试这样做: ```swift weak var delegate: MyDelegate? ``` 编译器报错:`'weak' may only be applied to class and class-bound protocol types`。我了解到需要让协议继承自`AnyObject`或在协议定义中使用`class`。但我不完全理解它的工作原理以及两者之间的区别。 我的主要问题是:如何正确声明协议,以便可以对委托属性使用`weak`,同时避免retain cycle?我希望委托可以是任何类型(类