I want to write a protocol with weak property requirement. Class that conforms it must be able to specify any type for this property. Also I don't want to specify an actual type, so it should be a type specified with some protocol. This code shows my idea for non-weak property:
protocol ObjectProtocol: class { typealias PropertyType var property: PropertyType {get set} } protocol FirstPropertyProtocol: class {} protocol SecondPropertyProtocol: class {} class FirstObjectImpl: ObjectProtocol { var property: FirstPropertyProtocol? } class SecondObjectImpl: ObjectProtocol { var property: SecondPropertyProtocol? } It works as expected.
I tried to do the same for weak property:
protocol ObjectProtocol: class { typealias WeakPropertyType: AnyObject //must be a class type weak var weakProperty: WeakPropertyType? {get set} } protocol WeakPropertyProtocol: class {} class ObjectImpl: ObjectProtocol { weak var weakProperty: WeakPropertyProtocol? } And I got a compiler error:
Type 'ObjectImpl' does not conform to protocol 'ObjectProtocol'
Is there any way I can make this work?
WeakPropertyTypeis a class type without thisAnyObjectconstraint?