如何制作PhotosPickerItem类型的Codable?

问题描述 投票:0回答:0

我正在尝试以任何可用的形式保存像 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([])
    }
}

}

swiftui codable nscoding photo-gallery userdefaults
© www.soinside.com 2019 - 2024. All rights reserved.