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`?