当来自模型时如何将数据保存在用户默认值中
Posted
技术标签:
【中文标题】当来自模型时如何将数据保存在用户默认值中【英文标题】:How to save data in userdefaults when is from a model 【发布时间】:2019-11-24 21:26:37 【问题描述】:我有一个这样的模型
struct House: Codable
let address: String?
let rooms: String?
let garage: Garage
struct Garage: Codable
let space: String?
let numbers_of_ cars: String?
我从 api 获取数据并设置为可以显示它, 现在我需要保存在 userdefaults 中,以便在没有任何网络 o wifi 时显示信息
我正在尝试这样
var itemItems = [House]()
fileprivate func fetchData()
Service.shared.fetchCourses (houses, err) in
if let err = err
print("Failed to fetch houses:", err)
return
self.itemItems = houses!
var itemsToSave = [House]()
for i in 0..<self.itemItems.count
itemsToSave.append(self.itemItems[i])
UserDefaults.standard.set(arrayToSave, forKey : "arrayToSave")
但是!!我收到一个错误 查看图片
https://i.ibb.co/bHhtj28/Captura-de-Pantalla-2019-11-24-a-la-s-4-25-18-p-m.png
【问题讨论】:
【参考方案1】:您不能将自定义结构直接保存到UserDefaults
。
但是由于两个结构都符合Codable
编码它们
var itemItems = [House]()
fileprivate func fetchData()
Service.shared.fetchCourses (houses, err) in
if let err = err
print("Failed to fetch houses:", err)
return
self.itemItems = houses!
do
let data = try JSONEncoder().encode(self.itemItems)
UserDefaults.standard.set(data, forKey : "houses")
catch print(error)
【讨论】:
不错!现在我没有错误,但是,当我尝试让数据不起作用时让 getDataHouses = UserDefaults.standard.string(forKey: "houses") ?? ““ 是正确的?因为当我打印它时,是“” 当然你必须用JSONDecoder
加载和解码Data
。
我正在这样做,但我得到了错误,请帮助:) let dataHousesStore = UserDefaults.standard.data(forKey: "houses")! do let jsonDecoder = JSONDecoder() let dataFinal = try jsonDecoder.decode(House.self, from: dataHousesStore) catch print("error" , error)
请阅读错误信息。你必须解码[House].self
,一个数组。以上是关于当来自模型时如何将数据保存在用户默认值中的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JSON 令牌保存到用户默认值,然后在不同的视图中使用它?斯威夫特 4