如何使用Swift从嵌套结构读取本地数据
我正在使用以下函数保存和加载数据,并使用以下结构进行建模,但我无法读取EntityDat的数组,不确定这是否是由于EntityModel结构或加载数据中的调用(让entityData=try JSONDecoder().decode(EntityModel.self,from:loadedData))这是不正确的 我希望我的load函数返回属于其父EntityModel的EntityData数组。(如下文) 我收到的电流输出是:如何使用Swift从嵌套结构读取本地数据,swift,struct,swift4,Swift,Struct,Swift4,我正在使用以下函数保存和加载数据,并使用以下结构进行建模,但我无法读取EntityDat的数组,不确定这是否是由于EntityModel结构或加载数据中的调用(让entityData=try JSONDecoder().decode(EntityModel.self,from:loadedData))这是不正确的 我希望我的load函数返回属于其父EntityModel的EntityData数组。(如下文) 我收到的电流输出是: EntityData:EntityModel(entidad:ni
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)
}
}
}
加载函数:
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
}
保存时,将其设置为如下数组
var arr : [[String: Any]] = [[
"client_name": self.clientNameFromCore,
"rut": self.clientRutFromCore,
"segment": self.segmentFromCore ]]
JSON无效。不相关但从不将符合
Codable
的结构成员声明为隐式未包装可选。不要那样做。将它们声明为非可选(在您的情况下建议)或常规可选(?
)。不要在解码错误
捕获块中打印错误。localizedDescription
。始终打印错误
@vadian谢谢您的输入。你介意解释一下最后的建议吗?为什么打印错误不好。localizedDescription?因为出现了错误。localizedDescription
您得到的是泛型,无法读取数据,因为它的消息格式错误。使用error
可以获得关于错误的确切类型和位置的全面错误消息。