我正在尝试以任何可用的形式保存像 PhotosPickerItem 这样的数组(而不是图像数组以节省内存),例如,通过使用 Codable 的 UserDefaults 。但是,我无法将指定类型与 Codable 协议匹配,或将 PhotosPickerItem 转换为 Data。另外,当我尝试使用 NSObject、NSCoding 协议时,运行代码时会显示编码错误。我将不胜感激您的建议和代码示例,因为我没有找到合适的选项(只有 String 和 Int 类型的示例)。
//代码示例
导入 SwiftUI 导入照片UI
结构 PickerItem:可编码 { var selectedPickerItem: PhotosPickerItem // 这是不正确的(只有像 String 或 Int 这样的简单类型才是正确的)
结构 PickerItemManager {
static let defaults = UserDefaults.standard
private init(){}
// save Data method
static func savePickerItems(pickerItem: [PickerItem]) {
do {
let encoder = JSONEncoder()
let pickerItems = try encoder.encode(pickerItem)
defaults.setValue(pickerItems, forKey: "pickerKeyName")
} catch let error {
print(#function, error)
}
}
//retrieve data method
static func getPickerItems() -> [PickerItem]{
guard let pickerItemsData = defaults.object(forKey: "pickerKeyName") as? Data else {return []}
do{
let decoder = JSONDecoder()
let pickerItems = try decoder.decode([PickerItem].self, from: pickerItemsData)
return pickerItems
} catch let error {
return([])
}
}
}