gpt4 book ai didi

arrays - 如何快速存储元组数组

转载 作者:行者123 更新时间:2023-11-28 11:11:21 26 4
gpt4 key购买 nike

我正在制作一个应用程序,我必须存储四个数组(类型为 [(Double, Double)] 和一个三元组类型 (String, String, String) 的数据。它们在以下类中声明

class DataStorer {
static var losArray = [(Double, Double)]()
static var morgenArray = [(Double, Double)]()
static var middagArray = [(Double, Double)]()
static var aftenArray = [(Double, Double)]()
static var lastMeal = ("", "", "")
}

我需要在应用关闭时(或发生其他事情,例如通话)将它们存档,并在应用需要时检索数据。数组的最大长度为 18。我该怎么做?

最佳答案

如果你的数组中没有太多的值,你可以将它们存储到 NSUserDefaults 中。对于结构化数据,我倾向于为子值创建字典,以使属性列表美观且用户可读。

将元组数组保存为默认值非常简单:

let encodedValues = losArray.map{return ["0":$0.0, "1":$0.1]}
NSUserDefaults.standardUserDefaults().setObject(encodedValues, forKey:"losArray")

加载有点复杂,但这只是为了说明属性列表中数据可能损坏的所有方式:

func loadValuesFromDefaults(arrayName:String) -> [(Double, Double)] {
guard let encodedArray = NSUserDefaults.standardUserDefaults().arrayForKey(arrayName) else {return []}
return encodedArray.map{$0 as? NSDictionary}.flatMap{
guard let values = $0 else {return nil}
if let xValue = values["0"] as? Double,
yValue = values["1"] as? Double {
return (xValue, yValue)
} else {
return nil
}
}
}

如果愿意,您可以将“0”和“1”标签替换为适合元组的标签。这将保存和加载一个字典数组,元组的值以人类可读的格式存储在数组中。这使得深入研究属性列表以及在开发期间或之后读取和调整值变得容易。

加载函数中的各种条件可以防止您丢失数组、错误类型的同名数组以及该数组中的个别损坏项。我已经看到从属性列表数组中反序列化原始对象数据时出现的严重崩溃和安全问题,因此我使用它来防止它们。

关于arrays - 如何快速存储元组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34862639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com