張淼 劉東旭
摘 要:隨著移動網(wǎng)絡(luò)的成熟,智能設(shè)備在人們的日常生活中變得不可或缺,隨時隨地幫助我們獲取最新的信息。本文使用Swift語言在iOS平臺開發(fā)了一款天氣APP,系統(tǒng)主要包括主頁信息模塊、城市查詢模塊和內(nèi)容分享模塊,使用的關(guān)鍵技術(shù)包括Alamofire、SwiftyJson、Cocoapods等,通過調(diào)用天氣預(yù)報網(wǎng)站的API來獲取城市的天氣情況并呈現(xiàn)給用戶,方便用戶隨時查看天氣情況,及時做好出行安排。
關(guān)鍵詞:iOS平臺;MVC架構(gòu);Cocoapods;Alamofire
一、背景
隨著互聯(lián)網(wǎng)的發(fā)展和4G技術(shù)的成熟,移動終端已經(jīng)變?yōu)槿藗兊娜粘I钪胁豢扇鄙俚囊徊糠帧D壳笆袌錾系闹髁鏖_發(fā)平臺有安卓、iOS和Windows Phone。其中iOS因為其無與倫比的安全性、獨特的工業(yè)設(shè)計風(fēng)格和成熟穩(wěn)定的操作系統(tǒng)獲得了不少人的青睞,可以說占領(lǐng)的市場上的半壁江山。[1]
另外由于現(xiàn)代人生活的節(jié)奏越來越快,出行前一般都會提前關(guān)注未來的天氣以備提前安排出行計劃。因此設(shè)計一款基于iOS的天氣APP可以方便用戶獲取本地、異地的天氣情況,滿足日常生活中的需求。另外考慮到目前大部分人的社交需求,還在app中增加了分享功能,可以把當(dāng)前信息分享給微博好友,實現(xiàn)信息的共享和好友的互動。
二、開發(fā)環(huán)境
(一)iOS平臺
iOS(以前稱為iPhoneOS)是蘋果公司專門為其硬件開發(fā)的移動操作系統(tǒng)。它是目前為公司許多移動設(shè)備提供動力的操作系統(tǒng),包括iPhone、iPad和iPod touch,也是繼安卓之后全球最流行的移動操作系統(tǒng)之一。
iOS整體架構(gòu)主要分為4層,分別是Cocoa Touch層、Media層、Core Service層、和Core OS層。[2]Cocoa Touch層中的大部分框架和界面相關(guān),主要負責(zé)和用戶打交道,比如用戶的各種觸摸操作就需要通過這個框架進行處理。通過媒體層,我們可以豐富自己的應(yīng)用程序,使用各種音頻、視頻、圖形等技術(shù)。核心服務(wù)層負責(zé)系統(tǒng)的一些核心服務(wù),比如電話簿、社交媒體等。核心操作系統(tǒng)層則提供一些底層的功能,比如對內(nèi)存進行管理或者對電源進行管理,主要涉及到硬件方面的處理。
(二)Xcode和Swift語言
工欲善其事必先利其器,在iOS上開發(fā)程序,就需要在蘋果電腦上配備一個Xcode軟件。Xcode是蘋果公司提供的一個集成開發(fā)環(huán)境,它用于管理工程、編輯代碼、構(gòu)建可執(zhí)行文件、進行代碼調(diào)試等等。[4]Swift是在蘋果2014年全球開發(fā)者大會(WWDC)上推出的,是蘋果為iOS、OS X、WatchOS、TVOS而創(chuàng)建的通用、多范式、編譯的編程語言。[3]另外Swift作為一種新編程語言,它雖然基于C和Objective-C,但由于采用了安全的編程模式和添加現(xiàn)代的功能來使得編程更加簡單、靈活和有趣。
三、軟件設(shè)計與實現(xiàn)
(一)MVC結(jié)構(gòu)
整個系統(tǒng)采用MVC(Model-View-Controller)三層架構(gòu)實現(xiàn)。Model(模型)用于封裝一組特定的數(shù)據(jù),并包含操作該數(shù)據(jù)的邏輯。比如當(dāng)你想到會計軟件時,發(fā)票就是一個模型。當(dāng)你想到微博應(yīng)用程序時,每條你看到的短文就是一個模型。本系統(tǒng)中定義了Weather Data Model,該類中包含城市名、天氣情況、溫度、濕度以及對應(yīng)天氣圖標(biāo)等。
視圖(View)是用戶可以在用戶界面(UI)中看到的對象。像UIButton、UIView和UILabel這樣的對象都是常見的視圖例子。
控制器控制視圖和模型之間的所有邏輯。由于視圖和模型之間不能夠直接通信,需要它在視圖和模型之間傳輸消息。本系統(tǒng)中定義了Chnage City View Controller,Weather View Controller和Share View Controller。
(二)關(guān)鍵技術(shù)
1.Alamofire
Open weather map網(wǎng)站可以提免費的天氣預(yù)報接口,提供當(dāng)前天氣的數(shù)據(jù)、5到16天的天氣預(yù)報、以往的天氣信息、氣象站點以及詳細的氣象信息等。
本系統(tǒng)利用Alamofire通過該網(wǎng)站提供的免費API來獲取響應(yīng)信息。Alamofire是一個用Swift編寫的HTTP網(wǎng)絡(luò)庫,可以讓開發(fā)者非常方便的的進行http的請求以及相應(yīng)數(shù)據(jù)的處理。[5]我們首先利用Alamofire的request方法向網(wǎng)站發(fā)出請求,同時在response方法中定義了如何對返回的信息進行處理。
2.SwiftyJson
對于網(wǎng)站返回的JSON類型數(shù)據(jù),如果自己定義函數(shù)處理會非常麻煩。因此我們使用第三方的框架SwiftyJSON。SwiftJSON是用Swift編寫的對JSON格式數(shù)據(jù)進行處理的類庫,里面提供了眾多方法,使用方便。在本系統(tǒng)中,我們通過SwiftyJSON對網(wǎng)站返回的相關(guān)天氣信息進行處理。
3.Cocoapods
CocoaPods是OS X和iOS下的一個第三類庫管理工具,并且支持Objective-C和Swift語言。[6]。通過Cocoapods工具我們可以很輕松的管理每個類庫。以本系統(tǒng)為例,開發(fā)中使用了Alamofire和SwiftyJson,因此在Podfile文件中添加以下兩句話進行配置:pod 'Alamofire','~> 5.0.0-beta.3',pod 'SwiftyJSON','~> 4.0'。
(三)系統(tǒng)實現(xiàn)
本系統(tǒng)主要分為三個部分:主頁信息模塊和城市查詢模塊和內(nèi)容分享模塊。
用戶打開APP之后首先看到啟動頁,緊接著加載主頁信息,此時我們可以直接看到本地當(dāng)前的天氣狀況,以及最近一周的天氣情況。通過點擊右上角的按鈕可以切換到查詢界面。在查詢界面,我們可以輸入任意一個地點,點擊查詢后,跳轉(zhuǎn)到當(dāng)?shù)氐奶鞖饨缑妗?/p>
以查詢界面為例,說明該模塊的實現(xiàn)。首先獲取輸入框輸入的文本,根據(jù)輸入信息向服務(wù)器發(fā)送請求,對服務(wù)器返回的信息用SwiftyJSON進行解析,然后更新主頁面的展示內(nèi)容。由于查詢界面和主頁是由不同的視圖控制器控制,因此此時涉及到不同ViewController之間的數(shù)據(jù)傳遞。其中向服務(wù)器發(fā)送請求并處理信息的主要函數(shù)如下圖所示:
四、結(jié)語
本文利用Swift語言在iOS平臺開發(fā)了一款天氣APP,通過調(diào)用天氣預(yù)報網(wǎng)站的API來獲取城市的天氣情況并呈現(xiàn)給用戶,方便用戶隨時查看天氣情況。本系統(tǒng)通過MVC框架構(gòu)建,通過Alamofire網(wǎng)絡(luò)框架向服務(wù)器請求天氣信息,并對返回的JSON數(shù)據(jù)利用SwiftyJson處理。經(jīng)測試該APP整體使用效果較好,基本上可以滿足用戶簡單的天氣查詢需求。
由于時間問題,天氣App應(yīng)用程序還有部分功能需要完善,如增加分享到微信、保存常用地點、消息推送等功能,進一步提升用戶體驗。
參考文獻:
[1]趙益澤.淺析安卓系統(tǒng),iOS,Windows Phone系統(tǒng)的差異性[J].數(shù)字通信世界,2017(11):147-148.
[2]關(guān)東升.移動操作系統(tǒng)原理與實踐[M].北京:清華大學(xué)出版社,2017:146-147.
[3]李亞欣,蔡永香,鄧舒穎.基于Swift對Objective-C開發(fā)的移動應(yīng)用程序優(yōu)化[J].軟件導(dǎo)刊,2018,17(10):178-182.
[4]傳智播客.Swift項目開發(fā)基礎(chǔ)教程[M].北京:人民郵電出版社,2016:6-7.
[5]鄭國凱,侯超鈞.基于iOS的學(xué)生考勤管理系統(tǒng)的設(shè)計與實現(xiàn)[J].現(xiàn)代計算機(專業(yè)版),2016(27):68-72.
[6]沈夢姣,蔡麗明.基于iOS平臺的嗨球APP的設(shè)計與實現(xiàn)[J].科技創(chuàng)新導(dǎo)報,2018,15(29):99-100.