我正在为UserDefaults
.
我想要实现的是:
- 将非零值设置为属性会将其存储在用户默认值中。
- 设置 nil 将从 UserDefault 中删除对象。
但是下面的代码会引发编译器错误:
条件绑定的初始化程序必须具有可选类型,而不是“T”
@propertyWrapper
struct UserDefault<T> {
let key: String
let defaultValue: T
init(_ key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue: T {
get { UserDefaults.standard.value(forKey: key) as? T ?? defaultValue }
set {
if let newValue = newValue {
UserDefaults.standard.setValue(newValue, forKey: key)
} else {
UserDefaults.standard.removeObject(forKey: key)
}
}
}
}
// Declaration
@UserDefault("key", defaultValue: nil)
static var newUserDefaultValue: String
有什么方法可以识别 T 是可选的吗?因为我可以从 UserDefaults 中删除密钥。如果不是如何达到预期的输出?