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