Json在线解析工具: http://www.jsoneditoronline.org/
实时天气API: http://www.k780.com/api/weather.today
①绘制简单的UI,三个label,分别显示城市、天气、温度
②在Class外面创建Weather结构体
struct Weather { var city:String? var weather:String? var temp:String? }
③编写配置天气的方法
func configView() { labelCity.text = self.weatherData?.city labelWeather.text = self.weatherData?.weather labelTemp.text = self.weatherData?.temp }
④将上述方法放入didset内,数据变化就更新页面
var weatherData:Weather?{ didSet{ configView() } }
⑤编写获取天气的方法,该方法放在viewDidLoad中
func getWeatherData(){ //武汉天气API let url = NSURL(string: "http://api.k780.com:88/?app=weather.today&weaid=248&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json") //新建一个会话配置器 let config = NSURLSessionConfiguration.defaultSessionConfiguration() //配置超时时间为10秒 config.timeoutIntervalForRequest = 10 //建立会话 let session = NSURLSession(configuration: config) //会话任务 let task = session.dataTaskWithURL(url!,completionHandler: { (data, _, error) -> Void in //如果没有错误,则处理数据 if error == nil{ do { //将json数据转化为字典 let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! NSDictionary //print(json) //把json对像直接实例成自定义对象 let weather = (json.valueForKey("result") as? NSDictionary).map{ Weather(city: $0["citynm"] as? String, weather: $0["weather"] as? String, temp: $0["temperature_curr"] as? String) } //在主线程中更新数据 dispatch_async(dispatch_get_main_queue(), { () ->Void in self.weatherData = weather }) } catch{ print("json error") } } }) //执行任务 task.resume() }
⑥网络访问时可能会报错,参考这篇博客
http://www.cnblogs.com/luoxiaoxi/p/5046518.html