码迷,mamicode.com
首页 > 其他好文 > 详细

天气预报

时间:2015-12-14 23:08:18      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

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

天气预报

标签:

原文地址:http://www.cnblogs.com/luoxiaoxi/p/5046091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!