Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Instanciar objeto com dados de uma webapi

Já pesquisei em vários sites e vídeos do YouTube e não encontro nada sobre isso, se houver alguém com disposição para me demonstrar esse código agradeço, porque não me basta olhar a documentação da Apple, gostaria de uma explicação de alguém que entenda do assunto e até me dizer se é uma boa pratica desenvolver algo nessa linha de raciocínio

Tenho um webapi que retorna uma lista de provas em JSON:

{
  "Provas": [
    {
      "Codigo": "16505984073",
      "Disciplina": {
        "Codigo": "657060",
       "Nome": "SOCIOLOGIA E EDUCAÇÃO"
      },
      "Tipo": "SUB",
      "Correcao": "2016-07-01T14:33:33.383",
     },
    {
      "Codigo": "16994242303",
      "Disciplina": {
        "Codigo": "652640",
        "Nome": "EDUCAÇÃO DE JOVENS E ADULTOS: FUNDAMENTOS E METODOLOGIA"
      },
      "Tipo": "SUB",
      "Correcao": "2016-06-30T11:53:11.207",
     },
    {
      "Codigo": "16916014662",
      "Disciplina": {
        "Codigo": "652540",
        "Nome": "METODOLOGIA E PRÁTICA DO ENSINO DA HISTÓRIA E GEOGRAFIA"
      },
      "Tipo": "BIMESTRAL",
      "Correcao": "2016-06-29T09:42:29.097",
     },
    {
      "Codigo": "16892010587",
      "Disciplina": {
        "Codigo": "656140",
       "Nome": "GESTÃO EDUCACIONAL"
      },
      "Tipo": "BIMESTRAL",
      "Correcao": "2016-06-25T14:49:57.17",
     },
    {
      "Codigo": "16435696693",
      "Disciplina": {
        "Codigo": "611460",
        "Nome": "ORIENTAÇÃO EM SUPERVISÃO ESCOLAR E ORIENTAÇÃO EDUC"
      },
      "Tipo": "BIMESTRAL",
      "Correcao": "2016-05-04T15:42:08.363",
     },
    {
      "Codigo": "16781197682",
      "Disciplina": {
        "Codigo": "567140",
        "Nome": "EDUCAÇÃO INCLUSIVA"
      },
      "Tipo": "SUB",
      "Correcao": "2016-05-04T15:38:09.707",
     },
    {
      "Codigo": "16496847758",
      "Disciplina": {
        "Codigo": "554740",
        "Nome": "PEDAGOGIA INTEGRADA"
      },
      "Tipo": "SUB",
      "Correcao": "2016-05-03T15:45:38.553",
     },
    {
      "Codigo": "16640802740",
      "Disciplina": {
        "Codigo": "538740",
        "Nome": "METODOLOGIA DO TRABALHO ACADÊMICO"
      },
      "Tipo": "SUB",
      "Correcao": "2016-05-03T14:50:06.06",
     }
  ]
}

E criei uma classe chamada Prova

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

e outra chama Disciplina

import Foundation

class Disciplina
{
    let codigo:String
    let nomedisciplina:String

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

Gostaria de preencher este retorno do wepapi instanciando meu objeto "Prova" e depois popular uma tableview até consegui fazer isso recebendo os dados do JSON usando o Alamofire e populando meu objeto com esses dados usando o ObjectMapper, porém gostaria de saber se há algo nativo do Swift 3.0 pois agora com a atualização da linguagem Alamofire e ObjectMapper estão dando muitos erros e tambem não acho trivial depender de soluções de terceiros. Também não sei se essa seria a boa pratica para trabalhar com dados web(Retornar dados em JSON e converter em Objeto), caso não seja poderiam me mostrar qual seria em codigo para Swift 3.0, estou com o Xcode 8 já.

2 respostas

Oi Julio, tudo bem ?

Cara não manjo muito de Swift, mas dei uma olhadinha e encontrei isso :

https://www.raywenderlich.com/120442/swift-json-tutorial

Vê se é útil.

Abraços

solução!

Opa fala aí Julio blz?

Realmente com a nova versão do Swift mudou algumas coisa, por exemplo foi renomeado a classe NSURLSession (utilizada para fazer requisições) para URLSession.

Para trabalhar com algo nativo em Swift você pode utilizar a própria classe URLSession nela tem um método chamado dataTask onde você passa uma URL e pode tratar o retorno em um closure.

Um dos parâmetros do closure é justamente um Data, a partir dele você pode usar tutorial que o Matheus Brandino passou. Que mostra como usar a classe NSJSONSerialization que também foi renomeada na ultima versão do Swift para JSONSerialization.

Ela transforma seu JSON em um objeto NSDictonary, nesse ponto é só pegar as informação do dicionário e preencher seu objeto. (ex: meuJson["provas"][0]["codigo"])

Aqui tem um tutorial de como utilizar o NSURLSession: https://www.raywenderlich.com/110458/nsurlsession-tutorial-getting-started

Se você escrever o código utilizando NSURLSession o próprio IDE vai te ajudar a converter o código para Swift 3.0.


Sobre usar ou não um Webservice para popular os dados do seu app.

Consumir um webservice é uma prática bem comum em desenvolvimento mobile.

E na grande maioria dos casos o formato utilizado para consumir esse webservices é o JSON por ser mais leve que outros formatos (por exemplo: XML).