swift - 如何使用 Swift 从嵌套结构中读取本地数据
问题描述
我正在使用以下函数保存和加载数据,并使用以下结构进行建模,但我无法读取 EntityDat 的数组,不确定是因为EntityModel Struct还是加载数据中的调用(let entityData =尝试 JSONDecoder().decode(EntityModel.self, from: loadedData) ) 不正确。
我希望我的加载函数返回一个属于他的父 EntityModel 的 EntityData 数组。(例如下面)
EntityModel {
{
"client_name": "John",
"rut": "70.605.045-5",
"segment": "Empresa"
},
{
"client_name": "Alex",
"rut": "60.345.234-1",
"segment": "Pyme"
},
{
"client_name": "Alice",
"rut": "12.426.434-5",
"segment": "Empresa"
},
}
我收到的当前输出是:
EntityData: EntityModel(entidad: nil)
保存功能:
func saveEntityToCoreData2()-> Bool {
var SavedItem:Bool = true
var mDictionary : [String: Any] = [
"client_name": self.clientNameFromCore,
"rut": self.clientRutFromCore,
"segment": self.segmentFromCore ]
let jsonData = try! JSONSerialization.data(withJSONObject: mDictionary, options: [.prettyPrinted])
let json = String(data: jsonData, encoding: String.Encoding.utf8)!
print("Saved Entity Dictionary", json)
if self.saveRutSwitchOn
{
SecureData.save(key: "entityData", data: json.data(using: .utf8)!)
}
SavedItem = self.saveRutSwitchOn
return SavedItem
}
加载功能:
func loadEntityToCoreData2() {
if let loadedData = SecureData.load(key: "entityData") {
do {
let entityData = try JSONDecoder().decode(EntityModel.self, from: loadedData)
print("EntityData: ", entityData)
} catch {
print(error.localizedDescription)
}
}
}
结构:
//Entity Model
struct EntityModel: Codable {
let entidad: [EntityData]!
}
struct EntityData: Codable {
let client_name: String!
let rut: String!
let segment: String!
}
解决方案
正确的 json
[
{
"client_name": "John",
"rut": "70.605.045-5",
"segment": "Empresa"
},
{
"client_name": "Alex",
"rut": "60.345.234-1",
"segment": "Pyme"
},
{
"client_name": "Alice",
"rut": "12.426.434-5",
"segment": "Empresa"
}
]
struct EntityModel: Codable {
let clientName, rut, segment: String
}
let decoder = JSONDecoder()
decoder.keyEncodingStrategy = .convertToSnakeCase
let entityData = decoder.decode([EntityModel].self, from:data)
当你保存时,把它变成一个数组
var arr : [[String: Any]] = [[
"client_name": self.clientNameFromCore,
"rut": self.clientRutFromCore,
"segment": self.segmentFromCore ]]
推荐阅读
- typescript - 无法提交,因为 Prettier 无法识别新文件
- javascript - 如何检查输入矩阵是否对称?
- c# - LINQ 选择新的集合
- arrays - Terraform嵌套循环对象数组,对象中有一个数组
- docker - Docker - Nifi:1.14.0 - 启动失败 - 原因:org.apache.nifi.properties.SensitivePropertyProtectionException
- php - 如何在 PHP 中将当前活动页面设置为 s 标题位置?
- javascript - 将活动类添加到菜单上的元素
- virtualization - x710 VF 使用 dpdk rte_flow_valida() 返回函数未实现
- javascript - 如何在状态中存储html元素
- qualtrics - 读取以数字开头的嵌入数据?