暗黙的にラップ解除されたオプショナルを処理しないように、プロパティ ラッパーがあります。
カスタムラッパーを使用して弱いプロパティを処理しようとする場合を除いて、うまく機能します。
@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 に準拠していますが、何が起こるかわかりません。
理由はわかりますか?