STRUCT 数组到 UserDefaults
STRUCT Array To UserDefaults
我有一个自定义结构 class 来保存卡路里、脂肪、碳水化合物和蛋白质。
每次用户输入数据时,我都会将其放入变量中
var theArray : NSMutableArray = []
struct CFCPstruct {
let calories : Int!
let fats : Int!
let carbs : Int!
let protein: Int!
init(Calories: Int, Fats: Int, Carbs: Int, Protein: Int) {
self.calories = Calories
self.fats = Fats
self.carbs = Carbs
self.protein = Protein
}
}
let addLog = [CFCPstruct(Calories: totalCalories, Fats: totalFats, Carbs: totalCarbs, Protein: totalProtein)]
现在我还创建了一个数组来存储所有内容。然后我需要将所有值存储到数组中,然后将其存储到 UserDefaults。
然后我将需要调用用户默认调用数组[0] 让我们说然后调用每个卡路里、碳水化合物...类似 thelog.calories // theology.carbs 等
为了能够使用 NSCoding
,对象必须是 class。但是由于所有值都符合 属性 列表,您可以添加变量 dictionaryRepresentation
和相应的初始值设定项。
首先 never 在 Swift 中使用 NSMutableArray
并且 never 将变量声明为隐式解包可选使用非可选初始化程序进行初始化。
var theArray = [CFCPstruct]()
struct CFCPstruct {
let calories : Int
let fats : Int
let carbs : Int
let protein: Int
init(calories: Int, fats: Int, carbs: Int, protein: Int) {
self.calories = calories
self.fats = fats
self.carbs = carbs
self.protein = protein
}
init(dictionary : [String:Int]) {
self.calories = dictionary["calories"]!
self.fats = dictionary["fats"]!
self.carbs = dictionary["carbs"]!
self.protein = dictionary["protein"]!
}
var dictionaryRepresentation : [String:Int] {
return ["calories" : calories, "fats" : fats, "carbs" : carbs, "protein" : protein]
}
}
现在您可以读取和写入用户默认值的数组。
func saveDefaults()
{
let cfcpArray = theArray.map{ [=11=].dictionaryRepresentation }
UserDefaults.standard.set(cfcpArray, forKey: "cfcpArray")
}
func loadDefaults()
{
theArray = (UserDefaults.standard.object(forKey: "cfcpArray") as! [[String:Int]]).map{ CFCPstruct(dictionary:[=11=]) }
}
现在,如果您已经创建了一个数据数组,您可以按如下方式保存它:-
let yourArrayOfDict = [["a": "Smith", "b": "UK"], ["a": "Paul", "b":
"UAE"]]
Swift 3:
let defaults = UserDefaults.standard
defaults.set(yourArrayOfDict, forKey: "customKey_SavedArray")
现在,您通过以下方式访问它们:
let s = defaults.value(forKey: "customKey_SavedArray")
print(s)
您将在 s 中获取您的值,因此您可以print(s)
确保数组已保存。
Swift 2:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setValue(yourArrayOfDict, forKey: "customKey_SavedArray")
访问它们 :
let s = defaults.objectForKey("customKey_SavedArray") as? [[String:AnyObject]]
现在,这里的 s 将值保存为您的数据数组,因此您不能像您所说的那样访问它们,
let first_item = s[0]
,
或者,您可以使用 for in
循环遍历数组中的项目。
我有一个自定义结构 class 来保存卡路里、脂肪、碳水化合物和蛋白质。
每次用户输入数据时,我都会将其放入变量中
var theArray : NSMutableArray = []
struct CFCPstruct {
let calories : Int!
let fats : Int!
let carbs : Int!
let protein: Int!
init(Calories: Int, Fats: Int, Carbs: Int, Protein: Int) {
self.calories = Calories
self.fats = Fats
self.carbs = Carbs
self.protein = Protein
}
}
let addLog = [CFCPstruct(Calories: totalCalories, Fats: totalFats, Carbs: totalCarbs, Protein: totalProtein)]
现在我还创建了一个数组来存储所有内容。然后我需要将所有值存储到数组中,然后将其存储到 UserDefaults。
然后我将需要调用用户默认调用数组[0] 让我们说然后调用每个卡路里、碳水化合物...类似 thelog.calories // theology.carbs 等
为了能够使用 NSCoding
,对象必须是 class。但是由于所有值都符合 属性 列表,您可以添加变量 dictionaryRepresentation
和相应的初始值设定项。
首先 never 在 Swift 中使用 NSMutableArray
并且 never 将变量声明为隐式解包可选使用非可选初始化程序进行初始化。
var theArray = [CFCPstruct]()
struct CFCPstruct {
let calories : Int
let fats : Int
let carbs : Int
let protein: Int
init(calories: Int, fats: Int, carbs: Int, protein: Int) {
self.calories = calories
self.fats = fats
self.carbs = carbs
self.protein = protein
}
init(dictionary : [String:Int]) {
self.calories = dictionary["calories"]!
self.fats = dictionary["fats"]!
self.carbs = dictionary["carbs"]!
self.protein = dictionary["protein"]!
}
var dictionaryRepresentation : [String:Int] {
return ["calories" : calories, "fats" : fats, "carbs" : carbs, "protein" : protein]
}
}
现在您可以读取和写入用户默认值的数组。
func saveDefaults()
{
let cfcpArray = theArray.map{ [=11=].dictionaryRepresentation }
UserDefaults.standard.set(cfcpArray, forKey: "cfcpArray")
}
func loadDefaults()
{
theArray = (UserDefaults.standard.object(forKey: "cfcpArray") as! [[String:Int]]).map{ CFCPstruct(dictionary:[=11=]) }
}
现在,如果您已经创建了一个数据数组,您可以按如下方式保存它:-
let yourArrayOfDict = [["a": "Smith", "b": "UK"], ["a": "Paul", "b": "UAE"]]
Swift 3:
let defaults = UserDefaults.standard
defaults.set(yourArrayOfDict, forKey: "customKey_SavedArray")
现在,您通过以下方式访问它们:
let s = defaults.value(forKey: "customKey_SavedArray")
print(s)
您将在 s 中获取您的值,因此您可以print(s)
确保数组已保存。
Swift 2:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setValue(yourArrayOfDict, forKey: "customKey_SavedArray")
访问它们 :
let s = defaults.objectForKey("customKey_SavedArray") as? [[String:AnyObject]]
现在,这里的 s 将值保存为您的数据数组,因此您不能像您所说的那样访问它们,
let first_item = s[0]
,
或者,您可以使用 for in
循环遍历数组中的项目。