我有一个属性包装器来避免处理隐式展开的选项。
它工作得很好,除非我尝试使用自定义包装器来处理弱属性:
@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() {}
}
假设我有以下协议:
protocol ViewModel: AnyObject {}
现在看起来像这样:
weak var viewModel: MyViewModel!
但是当我使用属性包装器时:
@WeakMaybeUninitialized var viewModel: MyViewModel
它返回错误“属性类型'MyViewModel 与其包装器类型'WeakMaybeUninitialized'的'wrappedValue'属性不匹配”
即使 MyViewModel 实际上符合 AnyObject,所以我不明白会发生什么。
你知道为什么吗?