如何将数据从JSON放入标签

如何将数据从JSON放入标签,json,swift,xcode,Json,Swift,Xcode,我需要将使用JSON获得的数据放入cityLabel、temperatureLabel、weatherLabel for today和tableview,其中我有dateLabel、weatherLabel以及未来5天的最低和最高温度标签。我知道,对于表视图,我还需要添加UITableViewDataSource。在模拟器中的这一刻,我得到了一个干净的标签,什么也没有 我在WeatherForecast.swift中的代码 import Foundation // MARK: - Welcom

我需要将使用JSON获得的数据放入cityLabel、temperatureLabel、weatherLabel for today和tableview,其中我有dateLabel、weatherLabel以及未来5天的最低和最高温度标签。我知道,对于表视图,我还需要添加UITableViewDataSource。在模拟器中的这一刻,我得到了一个干净的标签,什么也没有

我在WeatherForecast.swift中的代码

import Foundation

// MARK: - Welcome
struct WeatherForecast: Codable {
let cod: String
let message, cnt: Int
let list: [List]
let city: City
}

// MARK: - City
struct City: Codable {
let id: Int
let name: String
let coord: Coord
let country: String
let population, timezone, sunrise, sunset: Int
}

// MARK: - Coord
struct Coord: Codable {
let lat, lon: Double
}

// MARK: - List
struct List: Codable {
let dt: Int
let main: MainClass
let weather: [Weather]
let clouds: Clouds
let wind: Wind
let sys: Sys
let dtTxt: String
let rain, snow: Rain?

enum CodingKeys: String, CodingKey {
    case dt, main, weather, clouds, wind, sys
    case dtTxt = "dt_txt"
    case rain, snow
}
}

// MARK: - Clouds
struct Clouds: Codable {
let all: Int
}

// MARK: - MainClass
struct MainClass: Codable {
let temp, feelsLike, tempMin, tempMax: Double
let pressure, seaLevel, grndLevel, humidity: Int
let tempKf: Double

enum CodingKeys: String, CodingKey {
    case temp
    case feelsLike = "feels_like"
    case tempMin = "temp_min"
    case tempMax = "temp_max"
    case pressure
    case seaLevel = "sea_level"
    case grndLevel = "grnd_level"
    case humidity
    case tempKf = "temp_kf"
}
}

// MARK: - Rain
struct Rain: Codable {
let the3H: Double

enum CodingKeys: String, CodingKey {
    case the3H = "3h"
}
}

// MARK: - Sys
struct Sys: Codable {
let pod: Pod
}

enum Pod: String, Codable {
case d = "d"
case n = "n"
}

// MARK: - Weather
struct Weather: Codable {
let id: Int
let main: MainEnum
let weatherDescription, icon: String

enum CodingKeys: String, CodingKey {
    case id, main
    case weatherDescription = "description"
    case icon
}
}

enum MainEnum: String, Codable {
case clear = "Clear"
case clouds = "Clouds"
case rain = "Rain"
case snow = "Snow"
}

// MARK: - Wind
struct Wind: Codable {
let speed: Double
let deg: Int
}
通过解析JSON,我在ViewController.swift中得到了什么

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var cityNameLabel: UILabel!
@IBOutlet weak var temperatureLabel: UILabel!
@IBOutlet weak var weatherNowLabel: UILabel!
@IBOutlet weak var dailyWeatherTableView: UITableView!

var degreeSymbol = "º"

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

}

func currentWeatherRequest() {
    let session = URLSession.shared
        let weatherURL = URL(string: "http://api.openweathermap.org/data/2.5/forecast?q=Atlanta,us?&units=metric&APPID=apikey")!
    let dataTask = session.dataTask(with: weatherURL) { (data: Data?,response: URLResponse?,error: Error?) in
            if let error = error {
                print("Error:\n\(error)")

            } else {
                if let data = data {

                    do {
                        let dataString = String(data: data, encoding: String.Encoding.utf8)
                    print("Daily weather data:\n\(dataString!)")
                    let decoder = JSONDecoder()
                        let responseModel = try decoder.decode(WeatherForecast.self, from: data)
                    print(responseModel)
                           // } else {
                  //  print("Error: unable to convert json data")
             //   }
                    } catch let error {
                      print("Error: \(error)")
                    }
                }else {
                print("Error: did not receive data")

            }
            }
        }
        dataTask.resume()

    }

func weatherDetails(){
    print(City.self)

}

/* func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   <#code#>
}*/

}

在API Manager获得以下值后,可以为标签指定值

让responseModel=try decoder.decodewatherforecast.self,from:data 打印响应模型 比如说:citynamelab.text=responseModel.city.name

对于tableView,请确保使用故事板或以编程方式在视图中设置dailyWeatherTableView委托和数据源

dailyWeatherTableView.delegate=self
dailyWeatherTableView.dataSource=self

我建议您研究Swift和iOS编程。好的。我通过这个dispatchqueue.main.async{self.citynamelab.text=responseModel.city.Name}获得了城市名称,所以一切正常吗?还是还有问题?如果是,请解释