gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:38:21 26 4
gpt4 key购买 nike

这是我的属性包装器:

@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 应该有一个 bool 值,对吧?
@UserDefaultsBacked(key: "snap-is-enabled", defaultValue: false)
var snapStatus: Bool

但是编译器抛出一个错误:

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



enter image description here

我做错了吗?

最佳答案

您已声明 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?

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

关于Swift propertyWrapper 无法将声明类型的值转换为指定类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60439380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com