热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:手把手教你使用MJExtension

本文由编程笔记#小编为大家整理,主要介绍了手把手教你使用MJExtension相关的知识,希望对你有一定的参考价值。首先就是MJExtension的安装了,推荐cocoapod
本文由编程笔记#小编为大家整理,主要介绍了手把手教你使用MJExtension相关的知识,希望对你有一定的参考价值。


首先就是MJExtension的安装了,推荐cocoapods,如果还没有安装cocoapods的,请移步这里

https://www.jianshu.com/p/b4efe9fbc6e4

安装之后,就是使用了(这里,怎么用cocoapods安装第三方库,就不说了),github上作者已经写的很好了,这里,只是类似一个记录
从最简单的开始,我们定义一个Person的model(继承NSObject).h文件定义属性


#import
#import
@interface Person : NSObject
@property (nonatomic, strong) NSString
*name;
@property(nonatomic, assign) NSInteger age;
@end

通过字典(json字符串是一样的)生成model


NSDictionary *dic = @{@"name":@"revon", @"age":@"19"};
Person
*p1 = [Person mj_objectWithKeyValues:dic];

如果网络返回的值是一个ios的关键字,或者,你不想用返回的key,就需要改变映射关系:
假如,请求返回的key是name,但是,person里边,我就是想用personName,可以这么来


#import
#import
@interface Person : NSObject
@property (nonatomic, strong) NSString
*personName;
@property(nonatomic, assign) NSInteger age;
@end

在person的.m里边,改变映射关系


+ (NSDictionary *)mj_replacedKeyFromPropertyName{
return @{
@"personName" : @"persno"//前边的是你想用的key,后边的是返回的key
};
}

接下来的用法,就跟前边是一模一样的
如果,你想对返回的数据进行进一步的加工,例如,返回的是个时间戳,但是你想在生成model的时候,就转化为你想要的格式,依然Person举例


#import
#import
@interface Person : NSObject
@property (nonatomic, copy) NSString
*name;
@property(nonatomic, assign) NSInteger age;
@property (nonatomic, strong) NSString
*birthday;
@end

在Person的.m文件中


- (id)mj_newValueFromOldValue:(id)oldValue property:(MJProperty *)property{
if ([property.name isEqualToString:@"birthday"]) {
if (oldValue) {
// 格式化时间
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
formatter.timeZone
= [NSTimeZone timeZoneWithName:@"shanghai"];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setDateFormat:
@"yyyy年MM月dd日 HH:mm"];
NSDate
* date = [NSDate dateWithTimeIntervalSince1970:[oldValue doubleValue]];
NSString
* dateString = [formatter stringFromDate:date];
return dateString;
}
}
else {
return @"日期有误";
}
return oldValue;
}

是不是很方便?哈哈,注意,这个方法,还可以做一些判断,比如,返回的值是nil,怎么处理,返回的值不是预想的,怎么处理,都可以进行判断的!!

以上所有的转化model 的方法,都是这个


mj_objectWithKeyValues:

------------ 分割线 -----------
接下来介绍,model里边还有model的情况
新建一个Student的model


#import
@interface Student : NSObject
@property (nonatomic, copy) NSString
*name;
@property(nonatomic, assign) NSInteger age;
@end

在Person中,增加一个Student的属性


@interface Person : NSObject
@property (nonatomic, copy) NSString
*name;
@property(nonatomic, assign) NSInteger age;
@property (nonatomic, strong) NSString
*birthday;
@property (nonatomic, strong) Student
*stu;
@end

在Person的.m中不需要进行什么处理
用法举例:


NSDictionary *dic = @{
@"add" : @"杭州西湖区",
@"stu" : @{
@"name" : @"revon",
@"age" : @"10"
}
};
Person
*p = [Person mj_objectWithKeyValues:dic];
NSLog(
@"----- %@", p.stu.name);

这里,默认请求返回的key就是stu,如果不是stu,那么也是需要改变映射关系,可以参考上边,一样的!

接下来一种情况就是,Person中,有一个数组,数组里边,装的就是Student对象


#import
#import
#import "Student.h"
@interface Person : NSObject
@property (nonatomic, copy) NSString
*name;
@property(nonatomic, assign) NSInteger age;
@property (nonatomic, strong) NSString
*birthday;
@property (nonatomic, strong) Student
*stu;
@property (nonatomic, strong) NSArray
*stuarray;
@end

在Person的.m里边


+ (NSDictionary *)mj_objectClassInArray{
return @{@"stuarray" : @"Student"};//前边,是属性数组的名字,后边就是类名
}

用法就是:


NSDictionary *dic = @{@"add" : @"杭州西湖区",
@"stuarray" : @[@{@"name" : @"revon1", @"age" : @"18"}, @{@"name" : @"revon2", @"age" : @"140"}]};
Person
*p1 = [Person mj_objectWithKeyValues:dic];
for (Student *st in p1.stuarray) {
NSLog(
@"--- name is %@", st.name);
}

改变映射关系,跟上边是一样的!!

还有一个很好用的方法,如果请求返回的是一个数组,想要转化成一个model的数组,当然,你可以用for in循环来遍历出数组里边的每一个元素,然后再转化为model,然后再用一个数组存放转化好的model,这里,有一个简便的方法


resultArray = [Model mj_objectArrayWithKeyValuesArray:array];

这样是不是很方便,哈哈,好了,快乐的玩耍去吧!!

ps:model转字典,如果需要,可以去看github上边教程,地址:https://github.com/CoderMJLee/MJExtension简直就是so easy!!









推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。Swift中的闭包与C和Objective-C中的代码块(blocks)以及其他一些编程语言中的 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 我的iOS开发入门自学路径
    我有一个清单,列着希望在大学里完成的事。比如,学一门乐器,和朋友去旅游,搭建自己的博客,去滑翔,看各主题的书籍。其中一项是,写自己的App并且上架。去年开始,我准备完成这一项,所以 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
author-avatar
秋知落叶冷
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有