在Swift 5中保存天数数组

问题描述 投票:0回答:2

因此,我为一天和一饮料创建了一个类。并且我正试图跟踪您一天中的饮酒量,但我正努力节省数天的时间。我目前正在设法保存当天(当天的醉酒量),但我不知道如何保存多于一天的时间。

我想整天保存类型为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()。

ios arrays swift5 saving-data
2个回答
0
投票

1)您需要为此创建对象数组:

goalAmount = [Drink]()
var date = [Date]()

并附加每个新元素。您还可以在饮料类中添加日期变量。

2)您还可以创建字典数组:

var userData = [String : Any]()

键将是您的日期,并且任何包含与饮料数据相关的任何内容都可以存储任何内容。


0
投票

更好的方法是将类的对象存储在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()
       }
© www.soinside.com 2019 - 2024. All rights reserved.