Diccionary не хранится в UserDefaults - PullRequest
1 голос
/ 26 апреля 2020

Я определил следующий словарь:

    class TimeToEatTrackerViewModel: ObservableObject {

    @Published var mealAndStatus: [String: String] =
        UserDefaults.standard.dictionary(forKey: "mealAndStatus") as? [String: String] ?? ["Breakfast": "initial", "Snack": "notSet", "Lunch": "notSet", "Snack2": "notSet", "Dinner": "notSet"] {
        didSet {
            UserDefaults.standard.set(self.mealAndStatus, forKey: "mealAndStatus")
        }
    }
}

, и я вызываю его в представлении:

struct ContentView: View {

@ObservedObject var eatTracker = TimeToEatTrackerViewModel()

var body: some View {

    VStack {
        Button(action: {
            self.eatTracker.mealAndStatus["Breakfast"] = "done"
        }){
            Text(String(self.eatTracker.mealAndStatus["Breakfast"]!))
        }
    }
}
}

Хотя выполнение происходит, как ожидается, значения не отображаются сохраняются. Когда я закрываю приложение и возвращаюсь, новых значений там нет, почему?

Спасибо

1 Ответ

1 голос
/ 26 апреля 2020

Изменение значения содержимого оболочки свойства не вызывает didSet, по крайней мере на данный момент, Xcode 11.4, поэтому решение -

Button(action: {
    var tmp = self.eatTracker.mealAndStatus
    tmp["Breakfast"] = "done"
    self.eatTracker.mealAndStatus = tmp
}){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...