簡體   English   中英

將結構數組保存到userDefaults

[英]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然后進行轉換回到其原始形式,但再次不建議這樣做。

在此處了解更多信息。

也點擊搜索

swift的用戶默認設置是什么?

會給你答案

用戶默認值為應用程序包中的.plist文件,您可以使用它來設置和獲取簡單的數據 它的結構與字典非常相似,並且用戶默認值通常被視為鍵值存儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM