我有以下针对用户默认设置的属性包装器:
@propertyWrapper
class MyUserDefaultWrapper<T> {
let key: String
let defaultValue: T
init(_ key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue: T {
get {
let suit = UserDefaults.standard
return suit?.object(forKey: key) as? T ?? defaultValue
}
set {
let suit = UserDefaults.standard
suit?.set(newValue, forKey: key)
}
}
}
我定义它如下:
struct MyUserDefaultsCommon{
@MyUserDefaultWrapper("yearOfBirth", defaultValue: 1980)
static var yearOfBirth: Int
}
并且像这样调用:
MyUserDefaultsCommon.yearOfBirth = 2010
当我将默认值设置为 nil
时,构建失败并出现 sig abrt。
我如何限制从属性包装器类传递可选的默认值?还是有其他方法可以解决这个问题?
defaultValue
设置为nil
时,您是否也将属性类型更改为Optional
?例如,在您的示例中,它应该是static var yearOfBirth: Int?
而不是Int
。 - user28434'mstepnewValue
为 nil,则从UserDefaults
中删除该键,否则设置它。在set { // blah blah}
中。 - AdrianUserDefaults.standard
是非可选类型,所以suit?
应该会抛出错误。 - vadian