Swift properyWrapper 无法将声明类型的值转换为指定类型的值

Swift properyWrapper cannot convert value of declared type to value of specified type

这是我的 属性 包装器:

@propertyWrapper struct UserDefaultsBacked<Value> {
    let key: String
    let storage: UserDefaults = .standard
    var defaultValue: Value

    var wrappedValue: Value? {
        get {
            let value = storage.value(forKey: key) as? Value
            return value ?? defaultValue
        }
        set { storage.setValue(newValue, forKey: key) }
    }
}

这个变量 snapStatus 应该有一个布尔值,对吧?

@UserDefaultsBacked(key: "snap-is-enabled", defaultValue: false)
var snapStatus: Bool

但是编译器报错:

Cannot convert value of type 'UserDefaultsBacked' to specified type 'Bool'

我是不是做错了?

您已将 wrappedValue 声明为可选,例如Value?。将其更改为不是可选的,错误将消失:

@propertyWrapper struct UserDefaultsBacked<Value> {
    let key: String
    let storage: UserDefaults = .standard
    var defaultValue: Value

    var wrappedValue: Value {   // not `Value?`
        get {
            let value = storage.value(forKey: key) as? Value
            return value ?? defaultValue
        }
        set { storage.setValue(newValue, forKey: key) }
    }
}

或者,您可以保持 wrappedValue 不变,但您必须将 snapStatus 声明为可选:

var snapStatus: Bool?

我认为消除可选项是可行的方法,但为了完整起见,我将其包括在内。