zoukankan      html  css  js  c++  java
  • swift网络编程入门应用:天气预报

    学习来自《小波说雨燕 第二季 网络编程(入门篇)》

    工具:xcode6.4 

    首先在Main.storyborad中添加并设置好三个label做简单的界面显示:

     1 import UIKit
     2 
     3 //1、construct a constructs
     4 struct Weather {
     5     var city: String?
     6     var weather: String?
     7     var temp: String?
     8 }//为什么不实用class呢,因为结构体初始化方便,不用写初始化方法
     9 
    10 
    11 
    12 class ViewController: UIViewController {
    13 
    14     @IBOutlet weak var labelCity: UILabel!
    15     @IBOutlet weak var labelWeather: UILabel!
    16     @IBOutlet weak var labelTemp: UILabel!
    17     
    18     //3、接下来需要加一个计算属性
    19     var weatherData:Weather?{
    20         //4、发生变化的话,用swift独有的语法
    21         didSet {
    22             configView()
    23         }
    24     }
    25     
    26     //2、然后考虑到:一启动app就是要刷新数据,所以需要这么一个方法
    27     func configView(){
    28         labelCity.text = self.weatherData?.city
    29         labelWeather.text = self.weatherData?.weather
    30         labelTemp.text = self.weatherData?.temp
    31     }
    32     
    33     //4、新建一个获取天气数据的方法
    34     func getWeatherData()
    35     {
    36         //NSURLSession
    37         //<1>资源定位 NSURL 加载的网址
    38         let url = NSURL(string: "http://api.k780.com:88/?app=weather.today&weaid=238&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json")
    39         println(url!)
    40         //<2>URL Session Configuration(URL会话配置):磁盘缓存、内存缓存、系统后台执行。下面用默认的磁盘缓存
    41         let config = NSURLSessionConfiguration.defaultSessionConfiguration()
    42         println(config)
    43         config.timeoutIntervalForRequest = 10//配置超时时间,即用户加载网络的时间10秒以内
    44         //<3>建立会话
    45         let session = NSURLSession(configuration: config)
    46         
    47         //<4>会话的任务
    48         let task = session.dataTaskWithURL(url!, completionHandler: { (data,_, error) -> Void in
    49             //<6>如果连接没有错误,则处理数据
    50             if error == nil {
    51                 if let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: nil)as?NSDictionary{
    52                     //下面获取数据转为字典,然后把json对象,直接实例化成自定义的对象,这步相对复杂,因为用到一个map函数
    53                     let weather:Weather = (json.valueForKey("result") as? NSDictionary).map{
    54                         Weather(
    55                             city: $0["citynm"] as? String
    56                             ,weather: $0["weather"] as? String
    57                             ,temp: $0["temperature_curr"] as? String
    58                         )
    59                     }!
    60                     //<8>更新界面却很慢,是因为更新界面不在主线程中,所以要在主线程中跟新这个界面
    61                     dispatch_async(dispatch_get_main_queue(), {
    62                         ()->Void in
    63                         //<7>获取数据之后,就要在视图中显示
    64                         self.weatherData = weather
    65                     })
    66                     
    67                     
    68                 }
    69             }
    70         })//第二个参数就是task完成之后要做的操作
    71         //<5>执行任务
    72         task.resume()
    73         
    74         
    75     }
    76     override func viewDidLoad() {
    77         super.viewDidLoad()
    78         getWeatherData()
    79     }
    80 
    81     override func didReceiveMemoryWarning() {
    82         super.didReceiveMemoryWarning()
    83     }
    84 
    85 
    86 }

    然后运行就可以了:

  • 相关阅读:
    Linux内核RPC请求过程
    二分图
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 文本加密
    Java蓝桥杯 算法提高 九宫格
    Java蓝桥杯 算法提高 九宫格
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/4644987.html
Copyright © 2011-2022 走看看