• 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 }

    然后运行就可以了:

  • 相关阅读:
    lr http_get访问webservice
    lr http_post请求webservice
    快速幂(fast power)
    运算符重载
    1010 Radix 二分
    1054 The Dominant Color
    1042 Shuffling Machine
    1059 Prime Factors
    1061 Dating
    1078 Hashing
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/4644987.html
Copyright © 2020-2023  润新知