Присвоить данные json меткам - PullRequest
0 голосов
/ 17 апреля 2020

Я новичок в быстром программировании и хочу назначить данные меткам

, поэтому у меня есть этот код ниже

@IBOutlet weak var Infected: WKInterfaceLabel!
@IBOutlet weak var Cured: WKInterfaceLabel!
@IBOutlet weak var Deaths: WKInterfaceLabel!

@IBOutlet weak var OmanInfected: WKInterfaceLabel!
@IBOutlet weak var OmanCured: WKInterfaceLabel!
@IBOutlet weak var OmanDeaths: WKInterfaceLabel!
func check()
{

    // MARK: - CoronaData
    struct CoronaData: Codable {
        var countrydata: [Countrydatum]
        var stat: String
    }
    // MARK: - Countrydatum
    struct Countrydatum: Codable {
        var info: Info
        var totalCases, totalRecovered, totalUnresolved, totalDeaths: Int
        var totalNewCasesToday, totalNewDeathsToday, totalActiveCases, totalSeriousCases: Int
        var totalDangerRank: Int

        enum CodingKeys: String, CodingKey {
            case info
            case totalCases = "total_cases"
            case totalRecovered = "total_recovered"
            case totalUnresolved = "total_unresolved"
            case totalDeaths = "total_deaths"
            case totalNewCasesToday = "total_new_cases_today"
            case totalNewDeathsToday = "total_new_deaths_today"
            case totalActiveCases = "total_active_cases"
            case totalSeriousCases = "total_serious_cases"
            case totalDangerRank = "total_danger_rank"
        }
    }
    // MARK: - Info
    struct Info: Codable {
        var ourid: Int
        var title, code: String
        var source: String
    }

    if let url = URL(string: "https://api.thevirustracker.com/free-api?countryTotal=OM") {
       URLSession.shared.dataTask(with: url) { data, response, error in
          if let data = data {
              do {
                 let decoder = JSONDecoder()
                 let gitData = try decoder.decode(Countrydatum.self, from: data)
                print(gitData.totalCases as Any)
              } catch let error {
                 print(error)
              }
           }
       }.resume()
    }
}

как теперь я могу назначить эти значения меткам здесь (Num label)

enter image description here

Я знаю, что это глупый вопрос, но простите меня за это, я просто хочу закончить sh программу и узнай что-то новое

Ответы [ 2 ]

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

Вы можете скачать эту бесплатную программу, чтобы сделать структуру

enter image description here

см. Этот пример для использования структуры

         if let url = URL(string: "https://api.thevirustracker.com/free-api?countryTotal=OM") {
           URLSession.shared.dataTask(with: url) { data, response, error in
              if let data = data {
                  do {
                     let decoder = JSONDecoder()
                     let profile = try decoder.decode(ProfileResponse.self, from: data)
                     print(profile.countrydata.first)
                  } catch let error {
                     print(error)
                  }
               }
           }.resume()
        }

Вы можете изменить текст программно, используя метод setText ( :) или setAttributedText ( :).

Я повторяю запрос в Playground, текст по-разному шина в пути то, что вам нужно для доступа к данным одинаково, данные по стране - это массив, поэтому вам нужно получить первый элемент

import UIKit
import PlaygroundSupport

// MARK: - ProfileResponse
struct ProfileResponse: Codable {
    var countrydata: [ProfileCountrydatum]
    var stat: String
}

// MARK: - ProfileCountrydatum
struct ProfileCountrydatum: Codable {
    var info: ProfileInfo
    var totalCases, totalRecovered, totalUnresolved, totalDeaths: Int
    var totalNewCasesToday, totalNewDeathsToday, totalActiveCases, totalSeriousCases: Int
    var totalDangerRank: Int

    enum CodingKeys: String, CodingKey {
        case info
        case totalCases = "total_cases"
        case totalRecovered = "total_recovered"
        case totalUnresolved = "total_unresolved"
        case totalDeaths = "total_deaths"
        case totalNewCasesToday = "total_new_cases_today"
        case totalNewDeathsToday = "total_new_deaths_today"
        case totalActiveCases = "total_active_cases"
        case totalSeriousCases = "total_serious_cases"
        case totalDangerRank = "total_danger_rank"
    }
}

// MARK: - ProfileInfo
struct ProfileInfo: Codable {
    var ourid: Int
    var title, code: String
    var source: 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: "https://api.thevirustracker.com/free-api?countryTotal=OM") {
           URLSession.shared.dataTask(with: url) { data, response, error in
              if let data = data {
                  do {
                     let decoder = JSONDecoder()
                     let gitData = try decoder.decode(ProfileResponse.self, from: data)
                     label.text = "\(gitData.countrydata.first?.totalDeaths ?? 0)"
                  } catch let error {
                     print(error)
                  }
               }
           }.resume()
        }
    }
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

enter image description here

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

countrydata представлен в виде массива, но соответствующее свойство в вашей модели имеет тип String.

...