@State var cardData: [Card] = [
Card(number: 1 ,start: "05.06.2020", end: "15.06.2020", days: 10, success: true)
]
我有cardData,用户可以向此数组添加更多Elements。但我希望它会被保存。像UserDefaults。可以将这个(cardData)存储到UserDefaults吗? 如果没有,我如何将其永久保存? 非常感谢!
答案 0 :(得分:0)
有多种方法。会在视图中添加.onChange
修饰符(在Xcode 12上可用,不确定大约11):
.onChange(of: cardData) { newValue in
UserDefaults.standard.setValue(newValue, forKey: "Your_UserDefaults_Key")
}
我注意到您使用的是自定义类型。在这种情况下,您首先需要将所有数据转换为可以保存为UserDefaults的Type(例如字符串,使用可编码,请参见:https://www.hackingwithswift.com/example-code/system/how-to-load-and-save-a-struct-in-userdefaults-using-codable)
正如某人提到的那样,这可能不是将数据保存在永久性存储中的最佳方法。如果您打算保存大量数据,并且在任何时候都不需要所有这些数据(例如,在大多数情况下,您只需要所有这些卡之一),则不应使用UserDefaults,而应使用{{1 }}。在我描述的情况下,使用UserDefaults效率不高,因为您每次都必须从设备的存储中获取所有数据(您不能要求仅使用UserDefaults获得一张卡,而可以使用CoreData做到这一点)。而且,在将数据保存到设备的存储设备时,您还必须将整个旧数据替换为一些新数据(在CoreData中,您只需再添加一张卡即可。您无需将(all-current-cards)替换为(全部当前卡+ 1张新卡))