Выборка JSON и анализ в быстром кодовом приложении - PullRequest
0 голосов
/ 09 июня 2019

Я хочу получить опыт загрузки JSON и его анализа в приложении для iPhone или tvOS.На детской площадке у меня все заработало.Но теперь в приложении для iPhone или tvOS я не могу поместить данные в метку.

Получил помощь по устранению неполадок кода, смотрел видео с разбором и быстрым просмотром JSON на YouTube, но не повезло, что это что-то очень маленькое, я уверени я упускаю это из виду.

import UIKit

class ViewController: UIViewController {

  @IBOutlet weak var Title_Label: UILabel!

  override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }

  @objc func getNewTitles(){
    struct ToDo : Decodable {
       let userId, id : Int
       let title : String
       let completed : Bool
    }

    let url = URL(string: "https://jsonplaceholder.typicode.com/todos/1")!
    URLSession.shared.dataTask(with:url) { data, _, error in
      guard let data = data else { print(error!); return }

      do {
        let todo = try JSONDecoder().decode(ToDo.self, from: data)

        // get the values out of the struct
        let newsstring = (todo.title)
        self.Title_Label.text = newsstring
        //print(todo.userId)
        //print(todo.id)
        //print(todo.completed) 
      } catch {
        print(error)
      }
    }.resume()
  }
}

проблема в последней части

зачем нужен сам Title_Label?

Код не выдает ошибку, нотекст не отправляется в ярлык на моем экране телевизора?

1 Ответ

1 голос
/ 09 июня 2019

Прежде всего, пожалуйста, назовите этикетку в соответствии с соглашением об именах lowerCamelCased

@IBOutlet weak var titleLabel: UILabel!

Вы должны вызвать метод для извлечения данных в viewDidLoad (в этом случае не обязательно помечать как @objc)

override func viewDidLoad() {
    super.viewDidLoad()
    getNewTitles()
}

И, как уже упоминалось в комментариях, вы должны обновить ярлык в главной теме

do {
    let todo = try JSONDecoder().decode(ToDo.self, from: data)

    DispatchQueue.main.async {
        self.titleLabel.text = todo.title
    } 
} catch { ...

И объявить структуру хотя бы в области видимости класса или выше

class ViewController: UIViewController {

    struct ToDo : Decodable {
       let userId, id : Int
       let title : String
       let completed : Bool
    }

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...