新手自学ios 之 利用YYModel封装网络请求返回model
2016-10-25 17:15
447 查看
很多时候,我们在做项目的时候,服务端返回给我们的数据类型(json),很多格式如下,我们如果每个model 中都去写 total,resultCode 什么的,又很麻烦。
{
data: [
{
name: "张三",
icon: "http://~~~~~hahaha.png",
age: 18,
sex: "男",
address: "天安门广场",
}
],
resultMessage: "查询成功",
resultCode: "0",
total: 1
}
如上,可以看出,data 对应一个NSArray ,其中一个{} 包含的是一个 model ,加入是一个User 类。
现在记录我的解决方法
一、定义基类 CommonResponse,如下
@interface WSCommonResponse : NSObject
/**
* 判断是否成功,0是成功
*/
@property(nonatomic,assign) int ret;
/**
* 描述信息
*/
@property(nonatomic,copy) NSString *desc;
/**
* 数据源
*/
@property(nonatomic,strong) NSArray *data;
/**
* 数据量
*/
@property(nonatomic,assign) int total;
/**
* 判断请求是否成功
*/
- (BOOL) isSuccess;
/**
* 判断是否有数据源
*/
- (BOOL) hasData;
@end
二、这时候,我们新建继承自CommonResponse一个实体类,假如是个 TestResult类 , 这个类有来自于父类的几个属性,其中有个data 属性是NSArray 类型,如果让 YYModel 知道 NSArray 装的是 User 类呢?
#import "WSCommonResponse.h"
@interface WSTestResult : WSCommonResponse
+ (NSDictionary *)modelContainerPropertyGenericClass;
@end
@interface WSUser : NSObject
@property(nonatomic,assign) int age;
@property(nonatomic,copy) NSString *name;
@property(nonatomic,copy) NSString *sex;
@property(nonatomic,copy) NSString *icon;
@property(nonatomic,copy) NSString *phone;
@property(nonatomic,copy) NSString *address;
@end
上面 用到一个方法,是通过反射把 User 类转 父类中NSArray 的具体类的作用
+ (NSDictionary *)modelContainerPropertyGenericClass {
return @{@"data" : [WSUser class]};
}
此时我们再用的时候就直接调用
<pre name="code" class="objc">WSTestResult *result = [WSTestResult yy_modelWithJSON:responseObject];
if (result.isSuccess) {
//请求成功
if(result.hasData){
//有数据
//do something u want ...
//取出数据
WSUser *user = result.data[0];
} else {
//没有数据
[self showInfo:result.desc];
}
} else {
//接口畅通,但是请求失败了(非网络等其他原因)
[self showError:result.desc];
}
其中 responseObject 是AFNetworking 调用成功的时候返回的 json,
这样我们就完成了 服务端返回json 的封装
{
data: [
{
name: "张三",
icon: "http://~~~~~hahaha.png",
age: 18,
sex: "男",
address: "天安门广场",
}
],
resultMessage: "查询成功",
resultCode: "0",
total: 1
}
如上,可以看出,data 对应一个NSArray ,其中一个{} 包含的是一个 model ,加入是一个User 类。
现在记录我的解决方法
一、定义基类 CommonResponse,如下
@interface WSCommonResponse : NSObject
/**
* 判断是否成功,0是成功
*/
@property(nonatomic,assign) int ret;
/**
* 描述信息
*/
@property(nonatomic,copy) NSString *desc;
/**
* 数据源
*/
@property(nonatomic,strong) NSArray *data;
/**
* 数据量
*/
@property(nonatomic,assign) int total;
/**
* 判断请求是否成功
*/
- (BOOL) isSuccess;
/**
* 判断是否有数据源
*/
- (BOOL) hasData;
@end
二、这时候,我们新建继承自CommonResponse一个实体类,假如是个 TestResult类 , 这个类有来自于父类的几个属性,其中有个data 属性是NSArray 类型,如果让 YYModel 知道 NSArray 装的是 User 类呢?
#import "WSCommonResponse.h"
@interface WSTestResult : WSCommonResponse
+ (NSDictionary *)modelContainerPropertyGenericClass;
@end
@interface WSUser : NSObject
@property(nonatomic,assign) int age;
@property(nonatomic,copy) NSString *name;
@property(nonatomic,copy) NSString *sex;
@property(nonatomic,copy) NSString *icon;
@property(nonatomic,copy) NSString *phone;
@property(nonatomic,copy) NSString *address;
@end
上面 用到一个方法,是通过反射把 User 类转 父类中NSArray 的具体类的作用
+ (NSDictionary *)modelContainerPropertyGenericClass {
return @{@"data" : [WSUser class]};
}
此时我们再用的时候就直接调用
<pre name="code" class="objc">WSTestResult *result = [WSTestResult yy_modelWithJSON:responseObject];
if (result.isSuccess) {
//请求成功
if(result.hasData){
//有数据
//do something u want ...
//取出数据
WSUser *user = result.data[0];
} else {
//没有数据
[self showInfo:result.desc];
}
} else {
//接口畅通,但是请求失败了(非网络等其他原因)
[self showError:result.desc];
}
其中 responseObject 是AFNetworking 调用成功的时候返回的 json,
这样我们就完成了 服务端返回json 的封装
相关文章推荐
- 对iOS网络请求的容易封装,并且使用block回调函数方式
- iOS开发——post异步网络请求封装
- iOS网络请求简单封装
- iOS--封装网络请求 ——实例
- iOS 封装网络请求任务
- iOS简单封装网络请求,使用block回掉函数方式
- iOS封装网络请求
- iOS开发——post异步网络请求封装
- 自己动手写一个 iOS 网络请求库(二)——封装接口
- iOS开发:GET与POST接口网络请求以及对AFNetworking的二次封装
- 移动开发在路上-- IOS移动开发 五 网络请求封装
- 封装网络请求 - iOS网络篇
- IOS:MKNetworkKit的网络请求(使用封装好的类)
- iOS 自己封装的网络请求,json解析的类
- 对iOS网络请求的简单封装,并且使用block回调函数方式
- ios网络学习------8 xml格式数据的请求处理 用代码块封装
- IOS 网络请求返回数组解决方法
- iOS 自己封装的网络请求,json解析的类
- 使用AFNetWorking和ReactiveCocoa对网络请求进行封装(仿煎蛋iOS)(3)
- iOS 对基于AFNetworking框架网络请求的简单封装