0

我有一个属性包装器来避免处理隐式展开的选项。

它工作得很好,除非我尝试使用自定义包装器来处理弱属性:

@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,所以我不明白会发生什么。

你知道为什么吗?

4

0 回答 0