[英]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.