[Swift通天遁地]4、網絡和線程-(11)將服務器返回的JSON映射爲實例對象

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-widescjy-kw.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

目錄:[Swift]通天遁地Swiftios

本文將演示使用第三方類庫中,將服務器返回的JSON映射爲實例對象。git

首先確保在項目中已經安裝了所需的第三方庫。github

點擊【Podfile】,查看安裝配置文件。json

1 platform :ios, ’12.02 use_frameworks!
3 
4 target 'DemoApp' do
5     source 'https://github.com/CocoaPods/Specs.git'
6     pod 'Alamofire', '~> 4.0'
7     pod 'AlamofireObjectMapper', '~> 4.0'
8 end

根據配置文件中的相關配置,安裝第三方庫。swift

而後點擊打開【DemoApp.xcworkspace】項目文件。數組

接着建立一個類文件,做爲返回數據被映射的實例對象。服務器

在項目文件夾【DemoApp】上點擊鼠標右鍵,彈出右鍵菜單。微信

【New File】->【Cocoa Touch Class】->【Next】->網絡

【Class】:Forecast

【Subclass of】:Mappable

【Language】:Swift

->【Next】->【Create】

 1 //將新建文件引入的默認類庫進行修改。
 2 //修改爲上文安裝的映射庫。
 3 import ObjectMapper
 4 
 5 class Forecast: Mappable
 6 {
 7     //添加三個屬性
 8     var day: String?
 9     var temperature: Int?
10     var conditions: String?
11     
12     //添加一個必須實現的初始化方法
13     required init?(map: Map)
14     {
15         
16     }
17     
18     //添加一個映射方法
19     func mapping(map: Map)
20     {
21         //依次將Map中的內容,映射到對象的三個屬性
22         day <- map["day"]
23         temperature <- map["temperature"]
24         conditions <- map["conditions"]
25     }
26 }

繼續建立一個類文件,做爲返回數據被映射的實例對象。

在項目文件夾【DemoApp】上點擊鼠標右鍵,彈出右鍵菜單。

【New File】->【Cocoa Touch Class】->【Next】->

【Class】:WeatherResponse

【Subclass of】:Mappable

【Language】:Swift

->【Next】->【Create】

 1 //將新建文件引入的默認類庫進行修改。
 2 //修改爲上文安裝的映射庫。
 3 import ObjectMapper
 4 
 5 class WeatherResponse: Mappable
 6 {
 7     //添加一個字符串的屬性,表示天氣狀況的地理位置
 8     var location: String?
 9     //建立一個對象數組,表示三天內的天氣狀況。
10     //對象所屬的類,就是上文建立的包含三個屬性的天氣預報類。
11     var threeDayForecast: [Forecast]?
12     
13     //添加一個必須實現的初始化方法
14     required init?(map: Map)
15     {
16         
17     }
18     
19     //添加一個映射方法
20     func mapping(map: Map)
21     {
22         //依次將Map中的內容,映射到對象的兩個屬性
23         location <- map["location"]
24         threeDayForecast <- map["three_day_forecast"]
25     }
26 }

在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】

如今開始編寫代碼,訪問一個天氣預報的數據接口,

並將服務器返回的數據,映射成自定義的對象。

 1 import UIKit
 2 //在當前的類文件中,引入已經安裝的第三方類庫
 3 import Alamofire
 4 import AlamofireObjectMapper
 5 
 6 class ViewController: UIViewController {
 7 
 8     override func viewDidLoad() {
 9         super.viewDidLoad()
10         // Do any additional setup after loading the view, typically from a nib.
11         //處理服務器返回對象
12         responseObjectExample()
13 
14         //處理服務器返回數組
15         responseArrayExample()
16     }
17     
18     //添加一個方法,用來處理服務器返回對象的狀況。
19     func responseObjectExample()
20     {
21         //初始化一個字符串常量,做爲服務器的接口。
22         let URL = "https://raw.githubusercontent.com/tristanhimmelman/AlamofireObjectMapper/d8bb95982be8a11a2308e779bb9a9707ebe42ede/sample_json"
23         
24         //調用網絡操做庫的網絡請求方法,訪問該接口,
25         //並將返回的數據,轉換成自定義的對象。
26         Alamofire.request(URL).responseObject {
27             (response: DataResponse<WeatherResponse>) in
28             
29             //得到轉換後的對象,
30             let weatherResponse = response.result.value
31             //並在控制檯輸出對象的地理位置
32             print(weatherResponse?.location)
33             
34             //得到對象的包含將來三日天氣狀況的數組屬性
35             if let threeDayForecast = weatherResponse?.threeDayForecast
36             {
37                 //遍歷數組
38                 for forecast in threeDayForecast
39                 {
40                     //在控制檯輸出日期信息
41                     print("forecast.day:\(forecast.day)")
42                     //在控制檯輸出溫度信息
43                     print("forecast.temperature:\(forecast.temperature)")
44                 }
45             }
46         }
47     }
48     
49     //添加一個方法,處理返回數組
50     func responseArrayExample()
51     {
52         //初始化一個字符串常量,做爲服務器的接口。
53         let URL = "https://raw.githubusercontent.com/tristanhimmelman/AlamofireObjectMapper/f583be1121dbc5e9b0381b3017718a70c31054f7/sample_array_json"
54         
55         //調用網絡操做庫的網絡請求方法,訪問該接口,
56         //並將返回的數據,轉換成自定義的對象。
57         Alamofire.request(URL).responseArray {
58             (response: DataResponse<[Forecast]>) in
59             
60             //得到服務器返回的數據
61             let forecastArray = response.result.value
62             
63             //處理服務器返回的數組
64             if let forecastArray = forecastArray
65             {
66                 //遍歷數組
67                 for forecast in forecastArray
68                 {
69                     //在控制檯輸出日期信息
70                     print("forecast.day:\(forecast.day)")
71                     //在控制檯輸出溫度信息
72                     print("forecast.temperature:\(forecast.temperature)")
73                 }
74             }
75         }
76     }
77 
78     override func didReceiveMemoryWarning() {
79         super.didReceiveMemoryWarning()
80         // Dispose of any resources that can be recreated.
81     }
82 }
相關文章
相關標籤/搜索