為Sky定義model

這一節(jié)寺鸥,我們根據(jù)之前設(shè)計的UI滤港,設(shè)計對應(yīng)的Model眯勾。

DarkSky API

首先湃番,來了解一個簡單好用的天氣API服務(wù):DarkSky。簡單注冊登錄之后赌结,打開Console頁面就會看到一個Secret Key捞蛋,以及對應(yīng)的獲取天氣信息的方法:

DarkSkyAndModel

在圖中可以看到,我們只要發(fā)送GET請求到:https://api.darksky.net/forecast/your_secret_key/latitude,longitude柬姚,就可以請求到天氣信息了拟杉。當然,這個API還支持一些可選的參數(shù)量承,大家可以在這里找到詳細的API參數(shù)搬设。

而DarkSky返回的數(shù)據(jù)格式,大體是這樣的:

{
    "latitude": 37.8267,
    "longitude": -122.4233,
    "timezone": "America/Los_Angeles",
    "currently": {
        "time": 1506417757,
        "summary": "Clear",
        "icon": "clear-night",
        "nearestStormDistance": 482,
        "nearestStormBearing": 29,
        "precipIntensity": 0,
        "precipProbability": 0,
        "temperature": 61.23,
        "apparentTemperature": 61.23,
        "dewPoint": 48.81,
        "humidity": 0.64,
        "pressure": 1010.41,
        "windSpeed": 1.76,
        "windGust": 2.97,
        "windBearing": 287,
        "cloudCover": 0,
        "uvIndex": 0,
        "visibility": 10,
        "ozone": 293.28
    },
    "minutely": {
        "summary": "Clear for the hour.",
        "icon": "clear-night",
        "data": [...]
    },
    "hourly": {
        "summary": "Clear throughout the day.",
        "icon": "clear-day",
        "data": [...]
    },
    "daily": {
        "summary": "Light rain on Monday, with temperatures falling to 69°F on Monday.",
        "icon": "rain",
        "data": [...]
    },
    "flags": {
    "sources": [...],
    "isd-stations": [...],
    "units": "us"
    },
    "offset": -7
}

大家可以在這里每個參數(shù)的詳細說明宴合。這里焕梅,我們簡單說一下會用到的部分:

  • currently / minutely / hourly / daily節(jié)點包含的內(nèi)容,分別表示當前卦洽,按分鐘、按小時以及按天統(tǒng)計的天氣數(shù)據(jù)斜棚。我們的App首頁上半部分阀蒂,就會用到currently中的內(nèi)容;在稍后弟蚀,我們實現(xiàn)首頁下半部分的內(nèi)容時蚤霞,就會用到daily中的內(nèi)容;
  • currently中义钉,我們需要以下字段的內(nèi)容:
    • time:當前時間昧绣;
    • summary:當前天氣簡述;
    • icon:天氣圖標名稱捶闸,在Xcode的Assets里夜畴,我們使用的每一個圖片,都和這里的圖標名稱是一一對應(yīng)的删壮;
    • temperature:當前溫度(默認采用華氏度單位)贪绘;
    • humidity:濕度;

因此央碟,簡單來說税灌,我們需要的JSON暫時是這樣的:

{
    "latitude": 37.8267,
    "longitude": -122.4233,
    "timezone": "America/Los_Angeles",
    "currently": {
        "time": 1506417757,
        "summary": "Clear",
        "icon": "clear-night",
        "temperature": 61.23,
        "humidity": 0.64
    }
}

添加API配置信息

了解了DarkSky的API格式之后,為了使用這個API,我們要添加一些接口信息菱涤。為此苞也,在Sky group里,新建一個Configuration group粘秆,所有第三方服務(wù)的配置如迟,都會添加在這里。現(xiàn)在翻擒,我們先在其中創(chuàng)建一個Configuratioin.swift文件氓涣,并添加下面的代碼:

struct API {
    static let key = "your_secret_key_here"
    static let baseUrl = URL(string: "https://api.darksky.net/forecast")!
    static let authenticatedUrl = baseUrl.appendingPathComponent(key)
}

這樣,我們就能在整個項目里陋气,用統(tǒng)一的訪問訪問DarkSky的API了劳吠。

設(shè)計Model

添加好配置之后,我們就可以設(shè)計對應(yīng)的Model了巩趁。在項目的Sky group中痒玩,新建一個Models group,我們需要創(chuàng)建兩個models议慰。

一個model表示當前的位置和地區(qū)名稱蠢古。我們可以通過CoreLocation獲取到。新建一個Location.swift文件别凹,并添加下面的代碼:

struct Location {
    var name: String
    var latitude: Double
    var longitude: Double
}

由于稍后草讶,我們會用到定位功能,因此記得在Info.plist中添加下面的內(nèi)容向用戶申請權(quán)限:

<key>NSLocationWhenInUseUsageDescription</key>
<string>Sky needs your location to fetch the weather data.</string>

另一個model則表示天氣數(shù)據(jù)炉菲,這是DarkSky的返回值堕战。新建一個WeatherData.swift文件,并添加下面的代碼:

struct WeatherData: Codable {
    let latitude: Double
    let longitude: Double
    let currently: CurrentWeather

    struct CurrentWeather: Codable {
        let time: Date
        let summary: String
        let icon: String
        let temperature: Double
        let humidity: Double
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拍霜,一起剝皮案震驚了整個濱河市嘱丢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌祠饺,老刑警劉巖越驻,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異道偷,居然都是意外死亡缀旁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門试疙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诵棵,“玉大人,你說我怎么就攤上這事祝旷÷陌模” “怎么了嘶窄?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長距贷。 經(jīng)常有香客問我柄冲,道長,這世上最難降的妖魔是什么忠蝗? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任现横,我火速辦了婚禮,結(jié)果婚禮上阁最,老公的妹妹穿的比我還像新娘戒祠。我一直安慰自己,他們只是感情好速种,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布姜盈。 她就那樣靜靜地躺著,像睡著了一般配阵。 火紅的嫁衣襯著肌膚如雪馏颂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天棋傍,我揣著相機與錄音救拉,去河邊找鬼。 笑死瘫拣,一個胖子當著我的面吹牛亿絮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播麸拄,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼壹无,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了感帅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤地淀,失蹤者是張志新(化名)和其女友劉穎失球,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帮毁,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡实苞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了烈疚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黔牵。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖爷肝,靈堂內(nèi)的尸體忽然破棺而出猾浦,到底是詐尸還是另有隱情陆错,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布金赦,位于F島的核電站音瓷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏夹抗。R本人自食惡果不足惜绳慎,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漠烧。 院中可真熱鬧杏愤,春花似錦、人聲如沸已脓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摆舟。三九已至亥曹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恨诱,已是汗流浹背媳瞪。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留照宝,地道東北人蛇受。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像厕鹃,于是被迫代替她去往敵國和親兢仰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,089評論 1 32
  • 1.網(wǎng)絡(luò) 1.網(wǎng)絡(luò)七層協(xié)議有哪些剂碴? 物理層:主要功能:傳輸比特流把将;典型設(shè)備:集線器倘是、中繼器棘伴;典型協(xié)議標準和應(yīng)用:V...
    _我和你一樣閱讀 3,369評論 1 38
  • 自定義Gradle插件主要有三種形式疏橄,分別是build.gradle中編寫圃庭、buildSrc工程項目中編寫驴党、獨立項...
    Yolyn閱讀 1,158評論 0 3
  • Django Model 定義語法 版本:1.7主要來源:https://docs.djangoproject.c...
    羅田閱讀 31,017評論 2 42
  • 2015/04/22更新:最新更新到Xcode6.3和Swfit 1.2侄刽。 更新日志:這個教程由Vicent Ng...
    木易林1閱讀 277評論 0 0