How can I make a weak protocol reference in ‘pure’ Swift (without @objc)
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.