How can I make a weak protocol reference in 'pure' Swift (without @objc)

delegates, swift, swift-protocols

Solution

You need to declare the type of the protocol as `AnyObject`.

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

class SomeClass {
    weak var delegate: ProtocolNameDelegate?
}

Using `AnyObject` you say that only classes can conform to this protocol, whereas structs or enums can't.

Problem

`weak` references don't seem to work in Swift unless a `protocol` is declared as `@objc`, which I don't want in a pure Swift app. This code gives a compile error (`weak` cannot be applied to non-class type `MyClassDelegate`): ``` class MyClass { weak var delegate: MyClassDelegate? } protocol MyClassDelegate { } ``` I need to prefix the protocol with `@objc`, then it works. Question: What is the 'pure' Swift way to accomplish a `weak` `delegate`?

Original source

Related problems