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

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

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

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

1 platform :ios, ’12.0’
2 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

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

然后点击打开【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 }

原文地址:https://www.cnblogs.com/strengthen/p/10229119.html

时间: 2024-10-09 02:24:15

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

[Swift通天遁地]四、网络和线程-(13)创建一个Socket客户端

请点击Socket服务端文章:[Swift通天遁地]四.网络和线程-(14)创建一个Socket服务端 本文将演示Socket(套接字)客户端的使用. 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 在Github中下载项目:[SwiftSocket] 在[Source]文件夹,按下[Shift]选择多个文件. [yudpsocket.c] [ytcpsocket.c] [UDPClient.swift] [TCPClient.swift] [Swif

[Swift通天遁地]四、网络和线程-(4)使用Alamofire实现网络请求

本文将演示如何使用第三方库实现网络请求服务. 首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 source 'https://github.com/CocoaPods/Specs.git' 2 platform :ios, '12.0' 3 use_frameworks! 4 5 target ‘DemoApp’ do 6 pod 'Alamofire', '~> 4.0' 7 end 根据配置文件中的相关配置,安装第三方库. 然后点击打开[DemoA

[Swift通天遁地]四、网络和线程-(15)程序内购功能

本文将演示使用开源类库往项目中添加内购功能.内购功能需要在真机上进行测试. 内购是苹果市场上的一种常见的盈利模式. 首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'SwiftyStoreKit' 7 end 根据配

[Swift通天遁地]四、网络和线程-(12)使用ReachabilitySwift实现对网络状态的检测

本文将演示另外一种检测网络状态的方法. 首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'ReachabilitySwift' 7 end 根据配置文件中的相关配置,安装第三方库. 然后点击打开[DemoApp.xc

[Swift通天遁地]二、表格表单-(7)电子邮件Mail:实现单元格左右滑动调出功能按钮

本文将演示对单元格进行扩展,当手指在单元格左右滑动时,弹出不同的功能菜单. Github项目:[MGSwipeTableCell] 下载该项目的源代码.文件夹[demo]->文件夹[MailAppDemoSwift]->文件夹[MailAppDemoSwift] ->双击文件[MailAppDemoSwift.xcodeproj]打开示例工程. 选择该项目中的几个文件,拖动到自己的开发项目中.按住[Shift],选择 [MGSwipeButton.h] [MGSwipeButton.m]

[Swift通天遁地]八、媒体与动画-(4)给相机添加CoreImage滤镜效果

本文将演示如何给相机添加实时的滤镜效果. 首先打开项目的配置文件[Info.plist],在空白区域点击鼠标右键,弹出右键菜单. 选择[Add Row]添加行命令,添加一行配置选项. 在[Key]键输入框输入相机的访问标识:[Application Category] 在[Value]值输入框输入当应用程序访问相机设备时的提示语: [Requires access to the camera] 在左侧的项目导航区,打开视图控制器的代码文件[ViewController.swift] 现在开始编写

[Swift通天遁地]八、媒体与动画-(3)实现视频播放的水印、Overlay、暂停时插入广告等效果

本文将演示使用第三方类库实现视频视频播放的水印.Overlay.暂停时插入广告等效果. 首先确保在项目中,已经安装了所需的第三方类库,点击查看安装的配置文件. 1 platform :ios, '8.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'MobilePlayer' 7 end 根据配置文件中的相关设置,安装第三方类库. 完成安装之后

[Swift通天遁地]七、数据与安全-(11)如何检测应用程序中的内存泄露

本文将演示使用Instruments Allocations工具检测应用程序中的内存泄漏问题. 内存溢出 out of memory:是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出. 内存泄露 memory leak:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光. 在项目文件夹[DemoApp]上点击鼠标

[Swift通天遁地]八、媒体与动画-(11)实现音乐播放的动态视觉效果

本文将演示使用第三方类库实现音乐播放的动态视觉效果. 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, ‘12.0’ 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'AudioIndicatorBars' 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之后,双击打开项目文