Код: Выделить всё
struct GeneralSettingsView: View {
@State var model: SettingsProtocol
var body: some View {
SettingsRowWithToggle(
title: "Toggle1",
isOn: $model.toggle1)
SettingsRowWithToggle(
title: "Toggle2",
isOn: $model.toggle2)
}
}
/// Abstract settings
protocol SettingsProtocol {
var toggle1: Bool { get set }
var toggle2: Bool { get set }
}
/// Concrete settings that are stored in userDefaults
struct UserDefaultsSettings: SettingsProtocol {
@AppStorage("toggle1", store: UserDefaults(suiteName: Constants.appGroupID))
var toggle1: Bool = false
@AppStorage("toggle2", store: UserDefaults(suiteName: Constants.appGroupID))
var toggle2: Bool = false
}
GeneralSettingsView(model: UserDefaultsSettings())
< /code>
Я могу получить значения с удаленного сервера и обновить значение в пользователях: < /p>
let defaults = UserDefaults(suiteName: Constants.appGroupID)
defaults?.set(true, forKey: "toggle1") // UI not updated
defaults?.set(true, forKey: "toggle2")
< /code>
Я ожидаю, что переключатели изменят свое значение, когда я обновляю значения в пользовательском плане, но этого не произойдет. Это ошибка или я делаю что -то не так? Есть ли лучший способ запуска перезагрузки пользовательского интерфейса, когда у меня обновлены значения пользователя в каком -то другом классе?
Подробнее здесь: https://stackoverflow.com/questions/794 ... s-value-is