Как читать локальные данные из Nested Struct с помощью Swift - PullRequest
0 голосов
/ 07 мая 2019

Я сохраняю и загружаю данные, используя следующие функции и моделирование со следующими структурами, , но я не могу прочитать массив EntityDat , не уверен, что это из-за EntityModel Struct или вызов при загрузке данных ( let entityData = try JSONDecoder (). Decode (EntityModel.self, from :loadedData) ) это неверно.

Я хочу, чтобы моя функция загрузки возвращала массив EntityData, который принадлежит его родительскому EntityModel. (например, ниже)

 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)
            }
        }
    }

Struct:

//Entity Model
struct EntityModel: Codable {
    let entidad: [EntityData]!
}

struct EntityData: Codable {
    let client_name: String!
    let rut: String!
    let segment: String!
}

1 Ответ

0 голосов
/ 07 мая 2019

Правильный 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 ]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...