如何在 Swift 中附加字典值

How to append Dictionary value in Swift

我正在尝试将每日数据保存到字典中。当用户达到他们每日进度的 100% 时,我想将那一天和一个“真实”值添加到字典中。 问题是,当我尝试添加一个新的键和值时,它会覆盖前一个键和值,因为当天来自同一变量,该变量会根据日期更改其数据。

let calendarCurrent = Calendar.current
let currentDate = Date()

monthlyDictionary["\(calendarCurrent.component(.day, from: currentDate))"] = "true"
defaults.set(monthlyDictionary, forKey: "monthlyDictionary")

因此 Dictionary Key 将是一个等于当天的变量,并且值为“true”

您发布的代码总是用字典替换键 monthlyDictionary 的内容。您创建的字典使用当月的当天作为键和值“true”。

今天是 1 月 19 日,因此如果您今天 运行 该代码,它将在 UserDefaults 中创建一个条目,其中包含键 monthlyDictionary 和值 ["19": "true"]。明天它将用包含值 ["19": "true"]

的新字典替换键 monthlyDictionary 处的值

如果您想每天向字典中追加一个新条目,您需要阅读现有字典,追加一个值,然后重新编写它:

let calendarCurrent = Calendar.current
let currentDate = Date()

var oldMonthlyDictionary = [AnyHashable:Any]()
oldMonthlyDictionary = defaults.object(forKey: "monthlyDictionary") as? Dictionary else {
   print("dictionary not found. Creating empty dictionary")
}//Add this line

//Add a new key/value pair to your dictionary and re-save it.
oldMonthlyDictionary["\(calendarCurrent.component(.day, from: currentDate))"] = "true"
defaults.set(oldMonthlyDictionary, forKey: "monthlyDictionary")

编辑:

请注意,如果您在给定的日历日多次 运行 此代码,它将在随后的每个 运行.

中覆盖当前日期的先前值