如何解决存储/保存@State数组UserDefaults
@State var cardData: [Card] = [
Card(number: 1,start: "05.06.2020",end: "15.06.2020",days: 10,success: true)
]
我有cardData,用户可以向此数组添加更多Elements。但我希望它会被保存。像UserDefaults。可以将这个(cardData)存储到UserDefaults吗? 如果没有,我如何将其永久保存? 非常感谢!
解决方法
有多种方法。会在视图中添加.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张新卡))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。