打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[Swift通天遁地]四、网络和线程-(11)将服务器返回的JSON映射为实例对象

本文将演示使用第三方类库中,将服务器返回的JSON映射为实例对象。

首先确保在项目中已经安装了所需的第三方库。

点击【Podfile】,查看安装配置文件。

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

根据配置文件中的相关配置,安装第三方库。

然后点击打开【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>) in28             29             //获得转换后的对象,30             let weatherResponse = response.result.value31             //并在控制台输出对象的地理位置32             print(weatherResponse?.location)33             34             //获得对象的包含未来三日天气情况的数组属性35             if let threeDayForecast = weatherResponse?.threeDayForecast36             {37                 //遍历数组38                 for forecast in threeDayForecast39                 {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]>) in59             60             //获得服务器返回的数据61             let forecastArray = response.result.value62             63             //处理服务器返回的数组64             if let forecastArray = forecastArray65             {66                 //遍历数组67                 for forecast in forecastArray68                 {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 }

 

来源:http://www.icode9.com/content-4-100551.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
LogUtils:一个强大的Android日志管理器,支持对象、List、Map、数组等输出
Swift 网络请求+Json转model一套流程
Swift 4.2新特性
痞子一毛 你必须知道的JQuery--循环
使用FastJSON,将对象或数组和JSON串互转
【Golang开发面经】B站(两轮技术面)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服