基于iOS平台的天气APP的设计与实现
2019-10-21张淼刘东旭
张淼 刘东旭
摘 要:随着移动网络的成熟,智能设备在人们的日常生活中变得不可或缺,随时随地帮助我们获取最新的信息。本文使用Swift语言在iOS平台开发了一款天气APP,系统主要包括主页信息模块、城市查询模块和内容分享模块,使用的关键技术包括Alamofire、SwiftyJson、Cocoapods等,通过调用天气预报网站的API来获取城市的天气情况并呈现给用户,方便用户随时查看天气情况,及时做好出行安排。
关键词:iOS平台;MVC架构;Cocoapods;Alamofire
一、背景
随着互联网的发展和4G技术的成熟,移动终端已经变为人们的日常生活中不可缺少的一部分。目前市场上的主流开发平台有安卓、iOS和Windows Phone。其中iOS因为其无与伦比的安全性、独特的工业设计风格和成熟稳定的操作系统获得了不少人的青睐,可以说占领的市场上的半壁江山。[1]
另外由于现代人生活的节奏越来越快,出行前一般都会提前关注未来的天气以备提前安排出行计划。因此设计一款基于iOS的天气APP可以方便用户获取本地、异地的天气情况,满足日常生活中的需求。另外考虑到目前大部分人的社交需求,还在app中增加了分享功能,可以把当前信息分享给微博好友,实现信息的共享和好友的互动。
二、开发环境
(一)iOS平台
iOS(以前称为iPhoneOS)是苹果公司专门为其硬件开发的移动操作系统。它是目前为公司许多移动设备提供动力的操作系统,包括iPhone、iPad和iPod touch,也是继安卓之后全球最流行的移动操作系统之一。
iOS整体架构主要分为4层,分别是Cocoa Touch层、Media层、Core Service层、和Core OS层。[2]Cocoa Touch层中的大部分框架和界面相关,主要负责和用户打交道,比如用户的各种触摸操作就需要通过这个框架进行处理。通过媒体层,我们可以丰富自己的应用程序,使用各种音频、视频、图形等技术。核心服务层负责系统的一些核心服务,比如电话簿、社交媒体等。核心操作系统层则提供一些底层的功能,比如对内存进行管理或者对电源进行管理,主要涉及到硬件方面的处理。
(二)Xcode和Swift语言
工欲善其事必先利其器,在iOS上开发程序,就需要在苹果电脑上配备一个Xcode软件。Xcode是苹果公司提供的一个集成开发环境,它用于管理工程、编辑代码、构建可执行文件、進行代码调试等等。[4]Swift是在苹果2014年全球开发者大会(WWDC)上推出的,是苹果为iOS、OS X、WatchOS、TVOS而创建的通用、多范式、编译的编程语言。[3]另外Swift作为一种新编程语言,它虽然基于C和Objective-C,但由于采用了安全的编程模式和添加现代的功能来使得编程更加简单、灵活和有趣。
三、软件设计与实现
(一)MVC结构
整个系统采用MVC(Model-View-Controller)三层架构实现。Model(模型)用于封装一组特定的数据,并包含操作该数据的逻辑。比如当你想到会计软件时,发票就是一个模型。当你想到微博应用程序时,每条你看到的短文就是一个模型。本系统中定义了Weather Data Model,该类中包含城市名、天气情况、温度、湿度以及对应天气图标等。
视图(View)是用户可以在用户界面(UI)中看到的对象。像UIButton、UIView和UILabel这样的对象都是常见的视图例子。
控制器控制视图和模型之间的所有逻辑。由于视图和模型之间不能够直接通信,需要它在视图和模型之间传输消息。本系统中定义了Chnage City View Controller,Weather View Controller和Share View Controller。
(二)关键技术
1.Alamofire
Open weather map网站可以提免费的天气预报接口,提供当前天气的数据、5到16天的天气预报、以往的天气信息、气象站点以及详细的气象信息等。
本系统利用Alamofire通过该网站提供的免费API来获取响应信息。Alamofire是一个用Swift编写的HTTP网络库,可以让开发者非常方便的的进行http的请求以及相应数据的处理。[5]我们首先利用Alamofire的request方法向网站发出请求,同时在response方法中定义了如何对返回的信息进行处理。
2.SwiftyJson
对于网站返回的JSON类型数据,如果自己定义函数处理会非常麻烦。因此我们使用第三方的框架SwiftyJSON。SwiftJSON是用Swift编写的对JSON格式数据进行处理的类库,里面提供了众多方法,使用方便。在本系统中,我们通过SwiftyJSON对网站返回的相关天气信息进行处理。
3.Cocoapods
CocoaPods是OS X和iOS下的一个第三类库管理工具,并且支持Objective-C和Swift语言。[6]。通过Cocoapods工具我们可以很轻松的管理每个类库。以本系统为例,开发中使用了Alamofire和SwiftyJson,因此在Podfile文件中添加以下两句话进行配置:pod 'Alamofire','~> 5.0.0-beta.3',pod 'SwiftyJSON','~> 4.0'。
(三)系统实现
本系统主要分为三个部分:主页信息模块和城市查询模块和内容分享模块。
用户打开APP之后首先看到启动页,紧接着加载主页信息,此时我们可以直接看到本地当前的天气状况,以及最近一周的天气情况。通过点击右上角的按钮可以切换到查询界面。在查询界面,我们可以输入任意一个地点,点击查询后,跳转到当地的天气界面。
以查询界面为例,说明该模块的实现。首先获取输入框输入的文本,根据输入信息向服务器发送请求,对服务器返回的信息用SwiftyJSON进行解析,然后更新主页面的展示内容。由于查询界面和主页是由不同的视图控制器控制,因此此时涉及到不同ViewController之间的数据传递。其中向服务器发送请求并处理信息的主要函数如下图所示:
四、结语
本文利用Swift语言在iOS平台开发了一款天气APP,通过调用天气预报网站的API来获取城市的天气情况并呈现给用户,方便用户随时查看天气情况。本系统通过MVC框架构建,通过Alamofire网络框架向服务器请求天气信息,并对返回的JSON数据利用SwiftyJson处理。经测试该APP整体使用效果较好,基本上可以满足用户简单的天气查询需求。
由于时间问题,天气App应用程序还有部分功能需要完善,如增加分享到微信、保存常用地点、消息推送等功能,进一步提升用户体验。
参考文献:
[1]赵益泽.浅析安卓系统,iOS,Windows Phone系统的差异性[J].数字通信世界,2017(11):147-148.
[2]关东升.移动操作系统原理与实践[M].北京:清华大学出版社,2017:146-147.
[3]李亚欣,蔡永香,邓舒颖.基于Swift对Objective-C开发的移动应用程序优化[J].软件导刊,2018,17(10):178-182.
[4]传智播客.Swift项目开发基础教程[M].北京:人民邮电出版社,2016:6-7.
[5]郑国凯,侯超钧.基于iOS的学生考勤管理系统的设计与实现[J].现代计算机(专业版),2016(27):68-72.
[6]沈梦姣,蔡丽明.基于iOS平台的嗨球APP的设计与实现[J].科技创新导报,2018,15(29):99-100.