swift网络编程入门应用:天气预报
学习来自《小波说雨燕 第二季 网络编程(入门篇)》
工具:xcode6.4
首先在Main.storyborad中添加并设置好三个label做简单的界面显示:
import UIKit //1、construct a constructs
struct Weather {
var city: String?
var weather: String?
var temp: String?
}//为什么不实用class呢,因为结构体初始化方便,不用写初始化方法 class ViewController: UIViewController { @IBOutlet weak var labelCity: UILabel!
@IBOutlet weak var labelWeather: UILabel!
@IBOutlet weak var labelTemp: UILabel! //3、接下来需要加一个计算属性
var weatherData:Weather?{
//4、发生变化的话,用swift独有的语法
didSet {
configView()
}
} //2、然后考虑到:一启动app就是要刷新数据,所以需要这么一个方法
func configView(){
labelCity.text = self.weatherData?.city
labelWeather.text = self.weatherData?.weather
labelTemp.text = self.weatherData?.temp
} //4、新建一个获取天气数据的方法
func getWeatherData()
{
//NSURLSession
//<1>资源定位 NSURL 加载的网址
let url = NSURL(string: "http://api.k780.com:88/?app=weather.today&weaid=238&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json")
println(url!)
//<2>URL Session Configuration(URL会话配置):磁盘缓存、内存缓存、系统后台执行。下面用默认的磁盘缓存
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
println(config)
config.timeoutIntervalForRequest = //配置超时时间,即用户加载网络的时间10秒以内
//<3>建立会话
let session = NSURLSession(configuration: config) //<4>会话的任务
let task = session.dataTaskWithURL(url!, completionHandler: { (data,_, error) -> Void in
//<6>如果连接没有错误,则处理数据
if error == nil {
if let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: nil)as?NSDictionary{
//下面获取数据转为字典,然后把json对象,直接实例化成自定义的对象,这步相对复杂,因为用到一个map函数
let weather:Weather = (json.valueForKey("result") as? NSDictionary).map{
Weather(
city: $["citynm"] as? String
,weather: $["weather"] as? String
,temp: $["temperature_curr"] as? String
)
}!
//<8>更新界面却很慢,是因为更新界面不在主线程中,所以要在主线程中跟新这个界面
dispatch_async(dispatch_get_main_queue(), {
()->Void in
//<7>获取数据之后,就要在视图中显示
self.weatherData = weather
}) }
}
})//第二个参数就是task完成之后要做的操作
//<5>执行任务
task.resume() }
override func viewDidLoad() {
super.viewDidLoad()
getWeatherData()
} override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
} }
然后运行就可以了:
swift网络编程入门应用:天气预报的更多相关文章
- 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?
本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...
- 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?
本文引用了公众号纯洁的微笑作者奎哥的技术文章,感谢原作者的分享. 1.前言 老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天.实时音视频等)时,如果发现网络连接超时,第一时间想到的就是 ...
- 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)
本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...
- 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...
- 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手
.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...
- [转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么? http://www.52im.net/thread-1732-1-1.html 1.引言 本文接上篇<脑残式网 ...
- [转帖]脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手
脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手 http://www.52im.net/thread-1729-1-1.html 1.引言 网络编程中TCP协议的三次握手和 ...
- JAVA网络编程入门
JAVA网络编程入门 软件结构 C/S结构 B/S结构 无论哪一种结构,都离不开网络的支持.网络编程,就是在网络的条件下实现机器间的通信的过程 网络通信协议 网络通信协议:通信双方必须同时遵守才能完成 ...
随机推荐
- 【转载】ubuntu和debian环境下无法挂载vmware虚拟机共享目录的解决办法
转载自:http://www.fengfly.com/plus/view-210022-1.html 第一步,安装VMware Tools 打开虚拟机ubuntu(debian原理一样)后,首先,点击 ...
- django 快速实现完整登录系统(cookie)
经过前面几节的练习,我们已经熟悉了django 的套路,这里来实现一个比较完整的登陆系统,其中包括注册.登陆.以及cookie的使用. 本操作的环境: =================== deep ...
- 解决安装office2013时提示已安装相同版本的office
例如出现如上所示的图: ------------------------------------------------------------------ 在尝试使用官方的卸载清理工具无果后, 终极 ...
- 一个关于explain出来为all的说明及优化
explain sql语句一个语句,得到如下结果,为什么已经创建了t_bill_invests.bid_id的索引,但却没有显示using index,而是显示all扫描方式呢,原来这还与select ...
- [操作系统实验lab4]实验报告
实验概况 在开始实验之前,先对实验整体有个大概的了解,这样能让我们更好地进行实验. 我们本次实验需要补充的内容包括一整套以sys开头的系统调用函数,其中包括了进程间通信需要的一些系统调用如sys_ip ...
- [课程设计]Scrum日记本项目进度
Sprint 1时间:11.14-11.23 冲刺一这一阶段中主要实现的是界面和互交(已实现这两个功能) 燃尽图: 项目进度: 第一阶段:现阶段已经实现界面和互交. 第二阶段:进行填入信息,并记录日期 ...
- Logger.getLogger和LogFactory.getLog的区别
Logger来自log4j自己的包.如果用Logger.getLogger,需要一个log4j的jar包,用此方式你只能依靠log4j: LogFactory来自common-logging包.如果用 ...
- 【jQuery基础学习】08 编写自定义jQuery插件
目的:虽然jQuery各种各样的功能已经很完善了,但是我们还是要学会自己去编写插件.这样我们可以去封装一些项目中经常用到的专属的代码,以便后期维护和提高开发效率. jQuery插件的类型: 封装对象方 ...
- csharp: Speech
Speech SDK 5.1https://www.microsoft.com/en-us/download/details.aspx?id=10121 detects mobile devices ...
- 从零开始学习Linux(mkdir and rmdir)
今天说mkdir 和 rmdir.因为mkdir 内容比较少.而且也很好理解. 对于mkdir来说,一般只用到 -p -m,我只用过-p参数,-m也是刚刚看的. 先说不带参数的: mkdir tes ...