gpt4 book ai didi

ios - 将结构数组保存到 userDefaults

转载 作者:可可西里 更新时间:2023-11-01 00:27:13 26 4
gpt4 key购买 nike

在我的应用中,我让用户给一件衣服拍照,然后给它一个标签来描述它是什么类型(裤子、衬衫、鞋子等)。然后我获取此信息并将其保存到结构项中。之后,我将最近制作的 Item 放入一个 Items 数组中。我正在努力解决如何将这个项目数组保存到 UserDefaults 以便我可以在应用程序关闭时重新加载的问题。

我已经尝试将 Codable 添加到我的结构中,但这只会带来更多问题。每次用户向数组添加新项目时,我都想更新 UserDefaults。我计划在 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")
}

关于ios - 将结构数组保存到 userDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55815451/

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