YYModel是一个高性能的iOS/OSX模型转换框架.
这里仅为了学习之用.详情请参考原文GitHub:https://github.com/ibireme/YYModel
官方数据:
处理GitHubUser数据10000次耗时统计(iPhone 6)
![](https://img.haomeiwen.com/i3348392/9e73a2ec91057d69.png)
特性
- 高性能 : 模型转换性能接近手写解析代码
- 自动类型转换 : 对象类型可以自动转换
- 类型安全 : 转换过程中,所有的数据类型都会被检测一遍,以保证类型安全,避免崩溃问题的出现
- 无侵入性 : 模型无需继承自其他类
- 轻量级 : 该框架只有5个文件(包括.h文件)
- 文档和单元测试 : 文档覆盖率100%, 代码覆盖率99.6%。
使用方法
// JSON:
{
"uid":123456,
"name":"Harry",
"created":"1965-07-31T00:00:00+0000"
}
// Model:
@interface User : NSObject
@property UInt64 uid;
@property NSString *name;
@property NSDate *created;
@end
@implementation User
@end
// 将 JSON (NSData,NSString,NSDictionary) 转换为 Model:
User *user = [User yy_modelWithJSON:json];
// 将 Model 转换为 JSON 对象:
NSDictionary *json = [user yy_modelToJSONObject];
当 JSON/Dictionary 中的对象类型与 Model 属性不一致时,YYModel 将会进行如下自动转换。自动转换不支持的值将会被忽略,以避免各种潜在的崩溃问题。
JSON/Dictionary | Model |
---|---|
NSString | NSNumber,NSURL,SEL,Class |
NSNumber | NSString |
NSString/NSNumber | 基础类型 (BOOL,int,float,NSUInteger,UInt64,...) NaN 和 Inf 会被忽略 |
NSString | NSDate 以下列格式解析: yyyy-MM-dd yyyy-MM-dd HH:mm:ss yyyy-MM-dd'T'HH:mm:ss yyyy-MM-dd'T'HH:mm:ssZ EEE MMM dd HH:mm:ss Z yyyy |
NSDate | NSString 格式化为 ISO8601:"YYYY-MM-dd'T'HH:mm:ssZ" |
NSValue | struct (CGRect,CGSize,...) |
NSNull | nil,0 |
"no","false",... | @(NO),0 |
"yes","true",... | @(YES),1 |
Model 属性名和 JSON 中的 Key 不相同
// JSON:
{
"n":"Harry Pottery",
"p": 256,
"ext" : {
"desc" : "A book written by J.K.Rowing."
},
"ID" : 100010
}
// Model:
@interface Book : NSObject
@property NSString *name;
@property NSInteger page;
@property NSString *desc;
@property NSString *bookID;
@end
@implementation Book
//返回一个 Dict,将 Model 属性名对映射到 JSON 的 Key。
+ (NSDictionary *)modelCustomPropertyMapper {
return @{@"name" : @"n",
@"page" : @"p",
@"desc" : @"ext.desc",
@"bookID" : @[@"id",@"ID",@"book_id"]};
}
@end
网友评论