Я получаю ноль при разборе JSON со Swift - PullRequest
0 голосов
/ 30 апреля 2020

Я изучаю Swift и учусь на разбор JSON. У меня есть немного сложный API для меня, и я не могу получить данные из него. Можете ли вы сообщить мне, какие ошибки я делаю ниже?

import UIKit


struct DataSource: Codable {
    let status: Int
    let totalResults: String
    let articles: [Articles]
}

struct Articles: Codable {
    let source: [Source]
    let author: String
    let title: String
}

struct Source: Codable {
    let name: String
}

let source = URL(string: "http://newsapi.org/v2/everything?q=bitcoin&from=2020-03-29&sortBy=publishedAt&apiKey=51480e6fd4294010d")!
URLSession.shared.dataTask(with: source) { (data, response, error ) in

    if let data = data {

        let publishing = try? JSONDecoder().decode([DataSource].self, from: data)
        print(publishing)



    }
}.resume()

enter image description here

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Я исправил! Спасибо за все ваши рекомендации. Оценено!

import UIKit

Класс ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    struct DataSource: Codable {
        let status: String?
        let totalResults: Int?
        let articles: [Articles]
    }

    struct Articles: Codable {
        let source: Source
        let author: String
        let title: String
    }

    struct Source: Codable {
        let id: String?
        let name: String
    }

    let source = URL(string: "http://newsapi.org/v2/everything?q=bitcoin&from=2020-03-30&sortBy=publishedAt&apiKey=XXXXXX")!
    URLSession.shared.dataTask(with: source) { (data, response, error ) in

        do
        {
            let publishing = try JSONDecoder().decode(DataSource.self, from: data!)

            print(publishing)
        }
        catch
        {
            print(error)
        }



    } .resume()


}

}

0 голосов
/ 30 апреля 2020

Я делаю этот пример на детской площадке

import UIKit
import PlaygroundSupport


// MARK: - ProfileResponse
struct ArticlesResponse: Codable {
    var status: String
    var totalResults: Int
    var articles: [Article]
}

// MARK: - ProfileArticle
struct Article: Codable {
    var source: Source
    var author: String?
    var title, articleDescription: String
    var url: String
    var urlToImage: String?
    var publishedAt: String
    var content: String?

    enum CodingKeys: String, CodingKey {
        case source, author, title
        case articleDescription = "description"
        case url, urlToImage, publishedAt, content
    }
}

// MARK: - ProfileSource
struct Source: Codable {
    var id: String?
    var name: String
}


class MyViewController : UIViewController {
    override func loadView() {
        let view = UIView()
        view.backgroundColor = .white

        let label = UILabel()
        label.frame = CGRect(x: 150, y: 200, width: 200, height: 20)
        label.text = "Hello World!"
        label.textColor = .black

        view.addSubview(label)
        self.view = view

        if let url = URL(string: "http://newsapi.org/v2/everything?q=bitcoin&from=2020-03-30&sortBy=publishedAt&apiKey=f0b7d2e59beb4bcdb7a737a25c3542bc") {
           URLSession.shared.dataTask(with: url) { data, response, error in
              if let data = data {
                  do {
                     let decoder = JSONDecoder()
                     let data = try decoder.decode(ArticlesResponse.self, from: data)
                    label.text = "\(data.status)"
                  } catch let error {
                     print(error)
                  }
               }
           }.resume()
        }
    }
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

enter image description here

enter image description here

...