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 }

然后运行就可以了:

时间: 2024-08-01 12:15:37

swift网络编程入门应用:天气预报的相关文章

Java学习笔记—第十二章 Java网络编程入门

第十二章  Java网络编程入门 Java提供的三大类网络功能: (1)URL和URLConnection:三大类中最高级的一种,通过URL网络资源表达方式,可以很容易确定网络上数据的位置.利用URL的表示和建立,Java程序可以直接读入网络上所放的数据,或把自己的数据传送到网络的另一端. (2)Socket:又称"套接字",用于描述IP地址和端口(在Internet中,网络中的每台主机都有一个唯一的IP地址,而每台主机又通过提供多个不同端口来提供多种服务).在客户/服务器网络中,当客

UNIX网络编程入门——I/O复用

UNIX网络编程入门--TCP客户/服务器程序详解 UNIX网络编程入门--TCP客户/服务器程序存在问题及解决 在介绍I/O复用之前,我们先来看一个情况:运行我们前面两篇文章里面的服务器和客户端程序,当客户端在等待用户输入一行字符时,服务器崩溃或者关机了.此时虽然服务器TCP会正确地发送FIN给客户端TCP,但客户端阻塞于fget函数,等待从标准输入读入,无法及时地知道服务器已经终止,要等到它得到标准输入发送给服务器时才会返回错误. 要解决这个问题,就需要一种能力,能够同时观察多个I/O条件是

[转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么? http://www.52im.net/thread-1732-1-1.html 1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机网络编程的基础,TCP/UDP收发消息都靠它.我们熟悉的web服务器底层依赖它,我们用到的MySQL关系数据库.Redis内存数据库底层依赖它.我们用微信和别

[转帖]脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手 http://www.52im.net/thread-1729-1-1.html 1.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道"三次"和"四次",但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方式,来对这个知识点进行"脑残式"讲解(哈哈),期望读者们可以更加简单.直观地理解TCP网络通信交互的本

java网络编程入门教程

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

UNIX网络编程入门——TCP客户/服务器程序详解

前言 最近刚开始看APUE和UNP来学习socket套接字编程,因为网络这方面我还没接触过,要等到下学期才上计算机网络这门课,所以我就找了本教材啃了一两天,也算是入了个门. 至于APUE和UNP这两本书,书是好书,网上也说这书是给进入unix网络编程领域初学者的圣经,这个不可置否,但这个初学者,我认为指的是接受过完整计算机本科教育的研究生初学者,需要具有完整计算机系统,体系结构,网络基础知识.基础没打好就上来啃书反而会适得其反,不过对于我来说也没什么关系,因为基础课也都上得差不多了,而且如果书读

[8421论坛]2019 Socket网络编程入门到进阶与实战完整视频教程

第一章 课程介绍及java语言简介第二章 快速入门Socket网络编程第三章 快速入门Socket UDP第四章 快速入门Socket TCP第五章 UDP辅助TCP实现点对点传输案例第六章 简易聊天室案例第七章 服务器传输优化-NIO第八章 数据传输稳定性优化第九章 局域网文件快传技术实战第十章 聊天室升级版实战第十一章 语音数据即时通信实战第十二章 整体代码结构梳理与升华资料 下载地址? 原文地址:https://www.cnblogs.com/yellowvase/p/10720644.h

Linux网络编程入门 (转载)

http://www.cnblogs.com/RascallySnake/archive/2012/01/04/2312564.html (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端        在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一        个地方获取文件

Linux网络编程入门

(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一 个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序. 服务端 和客户端相对应的程序即为服务端程序.被动的等待外面的程序来和自己通