因此,我为一天和一饮料创建了一个类。并且我正试图跟踪您一天中的饮酒量,但我正努力节省数天的时间。我目前正在设法保存当天(当天的醉酒量),但我不知道如何保存多于一天的时间。
我想整天保存类型为Day的数组。我该怎么办?
这是我的全日班:
public class Day: NSObject {
var date: Date
var goalAmount: Drink
var consumedAmount: Drink
func saveDay() {
let formatting = DateFormatter()
formatting.dateFormat = "EEEE - dd/mm/yy"
UserDefaults.standard.set(formatting.string(from: date), forKey: "date")
UserDefaults.standard.set(goalAmount.amountOfDrink, forKey: "goal")
UserDefaults.standard.set(consumedAmount.amountOfDrink, forKey: "consumed")
}
func loadDay() {
let rawDate = UserDefaults.standard.value(forKey: "date") as? String ?? ""
let formatter = DateFormatter()
formatter.dateFormat = "EEEE - dd/mm/yy"
date = formatter.date(from: rawDate)!
goalAmount.amountOfDrink = UserDefaults.standard.float(forKey: "goal")
consumedAmount.amountOfDrink = UserDefaults.standard.float(forKey: "consumed")
}
}
这是我的饮料课:
class Drink: NSObject {
var typeOfDrink: String
var amountOfDrink: Float
}
我在当天进行任何更改时都会调用saveDay(),然后在应用程序打开时调用loadDay()。
1)您需要为此创建对象数组:
goalAmount = [Drink]()
var date = [Date]()
并附加每个新元素。您还可以在饮料类中添加日期变量。
2)您还可以创建字典数组:
var userData = [String : Any]()
键将是您的日期,并且任何包含与饮料数据相关的任何内容都可以存储任何内容。
更好的方法是将类的对象存储在userDefaults中,而不是存储该类的特定属性。并使用[Date]
代替Date
保存多天
首先,您有Serialize对象要存储在userDefaults中,而Deserialize要从userDefaults中获取数据。
class Day: Codable {
var date: [Date] = [Date] ()
var goalAmount: Drink
var consumedAmount: Drink
init(date: [Date], goalAmount: Drink,consumedAmount: Drink ) {
self.date = date
self.goalAmount = goalAmount
self.consumedAmount = consumedAmount
}
func saveDay(_ day : Day) {
do {
let object = try JSONEncoder().encode(day)
UserDefaults.standard.set(object, forKey: "day")
} catch {
print(error)
}
}
func loadDay() {
let decoder = JSONDecoder()
if let object = UserDefaults.standard.value(forKey: "day") as? Data {
do {
let day = try decoder.decode(Day.self, from: object)
print(day)
print(day.date)
print(day.goalAmount)
print(day.consumedAmount)
} catch {
print(error)
}
} else {
print("unable to fetch the data from day key in user defaults")
}
}
}
class Drink: Codable {
var typeOfDrink: String
var amountOfDrink: Float
init(typeOfDrink: String,amountOfDrink: Float ) {
self.typeOfDrink = typeOfDrink
self.amountOfDrink = amountOfDrink
}
}
使用saveAndGet
方法从userDefaults存储和获取详细信息。
func saveAndGet() {
// use any formats to format the dates
let date = [Date(), Date(), Date()]
let goalAmount = Drink(typeOfDrink: "Water", amountOfDrink: 5.0)
let consumedAmount = Drink(typeOfDrink: "Water", amountOfDrink: 3.0)
let day = Day(date: date, goalAmount: goalAmount, consumedAmount: consumedAmount)
day.saveDay(day)
day.loadDay()
}