昨天我们已经能成功将JSON格式的资料print出来了,接着就来实作天气预报App吧!
首先,我们要先将JSON格式的资料写成Codable的Struct,这部分要细心一点不能出错!
我们要先新增一个.swift档
如这张图所示,JSON格式是层层包住的
那你.swift档里面的struct就必须这样写
struct Weather: Codable {
var records: records
}
struct records: Codable {
var location: [location]
}
struct location: Codable {
var locationName: String
var weatherElement: [weatherElement]
}
struct weatherElement: Codable {
var elementName: String
var time: [time]
}
struct time: Codable {
var startTime: String
var endTime: String
}
以此类推....
完成之後呢,我们上中央气象局的API说明文件来查看有什麽预报因子是我们所需要在App上显示出来的
分别是Wx天气现象,ManT最高温度,MinT最低温度,CI舒适度,PoP降雨机率,再将这些预报因子用UILabel来显示
然後要写一个function来解析JSON资料
func loadAPI(locationName: String ,time: Int){
let url = "https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=CWB-FCD3F473-1F08-455C-9FF0-11AE228B011E&format=JSON&locationName=\(locationName)&time=\(time)"
let newUrl = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
var request = URLRequest(url: URL(string: newUrl)!,timeoutInterval: Double.infinity)
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
let decoder = JSONDecoder()
if let data = data, let weather = try? decoder.decode(Weather.self, from: data){
print(weather)
DispatchQueue.main.sync {
self.locationName.text = weather.records.location[0].locationName
self.maxT.text = weather.records.location[0].weatherElement[4].time[0].parameter.parameterName + "°" + weather.records.location[0].weatherElement[4].time[time].parameter.parameterUnit!
self.minT.text = weather.records.location[0].weatherElement[2].time[0].parameter.parameterName + "°" + weather.records.location[0].weatherElement[2].time[time].parameter.parameterUnit!
self.cI.text = weather.records.location[0].weatherElement[3].time[time].parameter.parameterName
self.poP.text = weather.records.location[0].weatherElement[1].time[time].parameter.parameterName + "%"
self.startTime.text = weather.records.location[0].weatherElement[0].time[time].startTime
self.endTime.text = weather.records.location[0].weatherElement[0].time[time].endTime
self.wx.text = weather.records.location[0].weatherElement[0].time[time].parameter.parameterName
}
}
else {
print("error")
}
}
task.resume()
}
之後按执行
就能成功在App上显示天气资讯啦!
但现在只能显示台中市的天气资讯
明天我们就来利用UIButton来选择想要的地点及时间
大数据落地的三部曲是:意愿、能力、工具 当今很多企业其实并不缺乏用数据辅助决策的意愿 缺的反而是「营...
本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtu...
前言 align 主要是以交错轴为主,而昨天的 ustify-content 则是以主轴为主 ali...
喵喵喵喵喵喵喵喵!!!终於写完 30 天的文章了,这 30 天中,我们从云端的概念开始,进入了 Go...
哈罗,我是 A Fei,今天是铁人赛开赛第三天,大家连假有去哪里走走吗?在这边叮咛大家,还是要多注意...