Я использую оболочку свойств, чтобы сохранить свои пользовательские значения по умолчанию. На устройствах iOS 13 это решение отлично работает. Однако в iOS 11 и iOS 12 значения не сохраняются в пользовательских значениях по умолчанию. Я читал, что оболочки свойств обратно совместимы, поэтому не знаю, почему это не работает в более старых версиях iOS.
Это оболочка свойства:
@propertyWrapper
struct UserDefaultWrapper<T: Codable> {
private let key: String
private let defaultValue: T
init(key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue: T {
get {
guard let data = UserDefaults.standard.object(forKey: key) as? Data else {
// Return defaultValue when no data in UserDefaults
return defaultValue
}
// Convert data to the desire data type
let value = try? JSONDecoder().decode(T.self, from: data)
return value ?? defaultValue
}
set {
// Convert newValue to data
let data = try? JSONEncoder().encode(newValue)
UserDefaults.standard.set(data, forKey: key)
UserDefaults.standard.synchronize()
}
}
}
struct UserDefault {
@UserDefaultWrapper(key: "userIsSignedIn", defaultValue: false)
static var isSignedIn: Bool
}
Затем я могу установить такое значение:
UserDefault.isSignedIn = true
Я неправильно использую оболочку свойств? У кого-нибудь еще возникают проблемы с обертками свойств в более старых версиях iOS?
try ?
для кодирования / декодирования ваших данных. Используйте try / catch и, по крайней мере, распечатайте любую возникающую ошибку. Кроме того, вам не нужно звонитьsynchronize
(но это не будет вашей проблемой) - person Paulw11   schedule 25.12.2019