Fill object in Swift using data from a JSON return

0

I have a webapi that returns a list of proofs:

{
  "Provas": [
    {
      "Codigo": "11111111111",
      "Disciplina": {
        "Codigo": "111111",
        "Nome": "SOCIOLOGIA E EDUCAÇÃO"
      },
      "Tipo": "SUB",
      "Correcao": "2016-07-01T14:33:33.383",
      "Exame": false,
      "Sub": true
    },
    {
      "Codigo": "22222222222",
      "Disciplina": {
        "Codigo": "333333",
        "Nome": "EDUCAÇÃO DE JOVENS E ADULTOS: FUNDAMENTOS E METODOLOGIA"
      },
      "Tipo": "SUB",
      "Correcao": "2016-06-30T11:53:11.207",
      "Exame": false,
      "Sub": true
    },
    {
      "Codigo": "333333333333",
      "Disciplina": {
        "Codigo": "444444",
        "Nome": "METODOLOGIA E PRÃTICA DO ENSINO DA HISTÓRIA E GEOGRAFIA"
      },
      "Tipo": "BIMESTRAL",
      "Correcao": "2016-06-29T09:42:29.097",
      "Exame": false,
      "Sub": false
    }
  ]
}

And I created a class called Proof

import Foundation

class Prova
{
    let codigo:String
    let tipo:String
    let dtcorrecao:NSDate
    let disciplina:Disciplina

    init(codigo:String, tipo:String, dtcorrecao:NSDate, disciplina:Disciplina)
    {
        self.codigo = codigo
        self.tipo = tipo
        self.dtcorrecao = dtcorrecao
        self.disciplina = disciplina
    }
}

and another calls Discipline

import Foundation

class Disciplina
{
    let codigo:String
    let nomedisciplina:String

    init(codigo:String, nomedisciplina:String)
    {
        self.codigo = codigo
        self.nomedisciplina = nomedisciplina
    }
}

I would like to know how to convert this data to a list of Tests according to my class ?, do I need to change anything in the construction of these classes?

    
asked by anonymous 20.07.2016 / 22:24

1 answer

0

One option using open source framework is Object Mapper :

import Foundation
import ObjectMapper //importa o framework

class Prova: Mappable // adota o protocolo
{
    // declara as variaveis
    var codigo: String!
    var tipo: String!
    var dtcorrecao: NSDate!
    var disciplina: Disciplina!
    var sub: Bool!
    var exame: Bool!

    // chama o inicializador que mapeia o JSON
    required init?(_ map: Map) {}

    // mapeia a classe conforme os campos do JSON
    func mapping(map: Map) {
      codigo      <- map["Codigo"]
      tipo        <- map["Tipo"]
      dtcorrecao  <- map["Correcao"]
      disciplina  <- map["Disciplina"]
      sub         <- map["Sub"]
      exame       <- map["Exame"]
    }
}

Discipline:

import Foundation
import ObjectMapper

class Disciplina: Mappable
{
    var codigo: String!
    var nomedisciplina: String!

    required init?(_ map: Map) {}

    func mapping(map: Map) {
       codigo           <- map["Codigo"]
       nomedisciplina   <- map["Nome"]
    }
}

Tests: (we need to map this key to the top of JSON)

import Foundation
import ObjectMapper

class Provas: Mappable
{
    var provas: [Prova]!

    required init?(_ map: Map) {}

    func mapping(map: Map) {
       provas           <- map["Provas"]
    }
}

To create a mapped object:

After requesting JSON just call

let provas = Mapper<Provas>().map(JSONString)
    
20.07.2016 / 23:02