I have a property wrapper to avoid dealing with implicitly unwrapped optionals.
It works great except when I try to use a custom wrapper to handle weak properties:
@propertyWrapper
public struct WeakMaybeUninitialized<T: AnyObject> {
private weak var storage: AnyObject?
public var wrappedValue: T
{
get { return storage as! T }
set { storage = newValue }
}
public init(storage: T? = nil) {
self.storage = storage
}
public init() {}
}
Assuming I have the following protocol:
protocol ViewModel: AnyObject {}
Now it looks like this:
weak var viewModel: MyViewModel!
But when I use the property wrapper:
@WeakMaybeUninitialized var viewModel: MyViewModel
It returns the error "Property type 'MyViewModel does not match that of the 'wrappedValue' property of its wrapper type 'WeakMaybeUninitialized'"
Even while MyViewModel actually conforms to AnyObject, so I don't understand what happen.
Do you have a idea why?