Swift ProperyWrapper не может преобразовать значение объявленного типа в значение указанного типа
Вот моя обертка свойств:
@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
Но компилятор выдает ошибку:
Невозможно преобразовать значение типа UserDefaultsBacked в указанный тип Bool
Я делаю это неправильно?
1 ответ
Решение
Вы заявили 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?
Я думаю, что отказ от опций - это правильный путь, но я включаю это для полноты картины.