【发布时间】:2020-04-03 18:23:29
【问题描述】:
我正在学习在 Xcode 中解析 OpenWeather API 并且有点困惑。 因此,我必须发出 get 请求以接收来自 OpenWeather 的天气报告,然后将其显示在我准备的标签中。
我有带标签网点的主要 VC
class ViewController: UIViewController {
@IBOutlet weak var weatherDescriptionlabel: UILabel!
@IBOutlet weak var cityLabel: UILabel!
@IBOutlet weak var currentWeatherLabel: UILabel!
var Data: [DataClass] = []
var cityName: String = ""
var currentWeather: Int = 0
var weatherDescription: String = ""
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
dataLoader().loadData()
}
}
我有一个单独的类来“准备”用于传输的 JSON 数据
class WeatherDataClass {
let cityName: String
let currentWeather: Int
let weatherDescription: String
init (data: NSDictionary){
let cityName = data["name"] as? String
let currentWeather = data["temp"] as? String
let weatherDescription = data["description"] as? String
self.cityName = cityName!
self.currentWeather = Int(currentWeather!)!
self.weatherDescription = weatherDescription!
}
}
还有一个调用 API 的 DataLoader
protocol dataLoaderDelegate{
func load( data: [WeatherDataClass] ) }
class dataLoader{
var delegate: dataLoaderDelegate?
var Url = URL(string: "http://api.openweathermap.org/data/2.5/weather?q=London,uk&APPID=f2a7ca3bd41dfa2efab0ad667aafe1df")!
func loadData(){
let url = Url
let request = URLRequest(url: url)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data,
let json = try? JSONSerialization.jsonObject(with: data, options: .allowFragments),
let jsonDict = json as? NSDictionary{
var weather: [WeatherDataClass] = []
for (_,data) in jsonDict where data is NSDictionary{
if let x = WeatherDataClass(data: data as! NSDictionary){
weather.append(x)
}
}
self.delegate?.load(data: weather)
} }
task.resume()
}
}
问题是来自 JSONdict 的数据没有包装到 NSDictionary 它仍然是 Any 并给我一个错误
我做错了什么? 提前感谢您的帮助
【问题讨论】:
-
我建议看看:swiftjson.guide
-
“它仍然是任何并给我错误” - 请分享您遇到的错误。
-
请搜索。有很多相关问题how to parse openweathermap。并且根本不要在 Swift 中使用
NS...集合类型。您丢弃了导致问题的类型信息。