[英]Saving an array of structs to userDefaults
在我的应用程序中,我让用户为一件衣服拍照,然后给它添加一个标签来描述它是什么类型(裤子,衬衫,鞋子等)。 然后,我获取此信息并将其保存到结构项中。 之后,我将最近制作的Item放入Items数组中。 我在如何将此项目数组保存到UserDefaults上感到挣扎,以便在应用程序关闭时可以重新加载。
我尝试将Codable添加到我的结构中,但这带来了更多问题。 每当用户向阵列中添加新项目时,我都想更新UserDefaults。 我计划在saveItemButton
函数中执行此saveItemButton
(如下所示)。
var itemsArray: [Item] = []
//.pants, .shirt, .shoes, .hat, .extra, .jacket
var itemType: clothingType? = nil
@IBAction func saveItemButton(_ sender: Any) {
if(itemType != nil && imageView.image != nil){
saveImage(imageName: ("item" + "\(itemsArray.count)"))
let item = Item(itemType: itemType!, itemName: ("item" + "\(itemsArray.count)"))
itemsArray.append(item)
//let defaults = UserDefaults.standard
//defaults.set(itemsArray, forKey: "SavedItemArray")
}
}
这是我在单独的swift文件中的结构:
import Foundation
import UIKit
struct Item{
var itemType: clothingType
var itemName: String
//var itemImage: UIImage?
}
enum clothingType{
case pants
case shirt
case jacket
case shoes
case hat
case extra
}
这是我从UserDefaults加载itemArray的位置:
override func viewDidLoad() {
super.viewDidLoad()
// let defaults = UserDefaults.standard
// let array = defaults.array(forKey: "SavedItemArray") as? [Item] ?? [Item]()
// itemsArray = array
}
希望能够将Item数组保存并加载到UserDefaults。
像这样:
struct Item : Codable {
var itemType: clothingType
var itemName: String
}
enum clothingType : String, Codable {
case pants
case shirt
case jacket
case shoes
case hat
case extra
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let defaults = UserDefaults.standard
if let data = defaults.data(forKey: "SavedItemArray") {
let array = try! PropertyListDecoder().decode([Item].self, from: data)
}
}
}
当然,我想现在您想知道我们如何首先将数据转换为用户默认值。 像这样:
let array : [Item] = // whatever
if let data = try? PropertyListEncoder().encode(array) {
UserDefaults.standard.set(data, forKey: "SavedItemArray")
}
正如@rmaddy评论所说
不建议将这类数据保存到
UserDefault
中
但是从技术上说,您要保存那些您喜欢的东西, UserDefault
不接受这种类型的结构,您需要做的是将该数组转换为Data
类型,将其保存到UserDefault
,然后将其提取为Data
然后进行转换回到其原始形式,但再次不建议这样做。
在此处了解更多信息。
也点击搜索
会给你答案
用户默认值为应用程序包中的
.plist
文件,您可以使用它来设置和获取简单的数据 。 它的结构与字典非常相似,并且用户默认值通常被视为键值存储。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.