1. 字典转model类
每个字典都相当于一个model类,model类更倾向于可变字典
2. 封装
@public 暴露的类的内部细节,不能满足封装要求
2.1 封装需要考虑的问题
1) 最开始时忘记赋值
2) 使用时能否进行二次修改
2.2 封装:高内聚,低耦合
1) 必须给定的变量(仅适用于初始化方法)
2) 给使用者安全(提供尽量少的接口:属性,方法)
3) 简化代码(重用性强)
下面用一个例子具体说明字典转model类和封装
例子:分别用普通写法(打印出整个大数组)、将字典转换为model类(打印image数组)、封装的方法(打印image数组)储存以下信息
(
{
body = {
errorcode = 1;
message = "错误信息";
};
header = (
{
content = "相册";
image = (
"http://www.hunliji.com1",
"http://www.hunliji.com2",
"http://www.hunliji.com3"
);
page = 10;
title = "婚纱";
}
);
}
)
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 存images的数组
NSMutableArray *imageArr = [NSMutableArray arrayWithObjects:@"http://www.hunliji.com1", @"http://www.hunliji.com2", @"http://www.hunliji.com3", nil];
// header数组中的字典
NSMutableDictionary *headerDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"10", @"page", @"婚纱", @"title", @"相册", @"content", imageArr, @"image", nil];
// header数组
NSMutableArray *headerArr = [NSMutableArray arrayWithObjects:headerDic, nil];
// body字典
NSMutableDictionary *bodyDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"错误信息", @"message", @"1", @"errorcode", nil];
// bigDic字典 存放 body字典 和 header数组
NSMutableDictionary *bigDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:bodyDic, @"body", headerArr, @"header", nil];
// bigArr数组 存放 bigDic字典
NSMutableArray *bigArr = [NSMutableArray arrayWithObjects:bigDic, nil];
// 打印bigArr数组
NSLog(@"bigArr = \n%@", bigArr);
}
return 0;
}
打印结果:bigArr =
(
{
body = {
errorcode = 1;
message = "\U9519\U8bef\U4fe1\U606f";
};
header = (
{
content = "\U76f8\U518c";
image = (
"http://www.hunliji.com1",
"http://www.hunliji.com2",
"http://www.hunliji.com3"
);
page = 10;
title = "\U5a5a\U7eb1";
}
);
}
)
2. 将字典转换为model类
将每个字典都写成一个model类,将每个字典的所有的value都设成model类中的属性,一共有3个字典:HeaderDic、BobyDic、BigDic
2.1 HeaderDic
{
content = "相册";
image = (
"http://www.hunliji.com1",
"http://www.hunliji.com2",
"http://www.hunliji.com3"
);
page = 10;
title = "婚纱";
}
#import <Foundation/Foundation.h>
@interface HeaderDic : NSObject
@property (nonatomic, retain) NSString *page;
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *content;
@property (nonatomic, retain) NSMutableArray *image;
+ (instancetype)headerDicWithPage:(NSString *)page title:(NSString *)title content:(NSString *)content image:(NSMutableArray *)image;
@end
#import "HeaderDic.h"
@implementation HeaderDic
- (void)dealloc
{
[_page release];
[_content release];
[_title release];
[_image release];
[super dealloc];
}
- (instancetype)init
{
self = [super init];
if (self) {
self.image = [NSMutableArray array];// NSString不写
}
return self;
}
+ (instancetype)headerDicWithPage:(NSString *)page title:(NSString *)title content:(NSString *)content image:(NSMutableArray *)image
{
HeaderDic *hDic = [[HeaderDic alloc] init];
hDic.page = page;
hDic.title = title;
hDic.content = content;
hDic.image = image;
return [hDic autorelease];
}
@end
{
errorcode = 1;
message = "错误信息";
}
#import <Foundation/Foundation.h>
@interface BodyDic : NSObject
@property (nonatomic, retain) NSString *errorcode;
@property (nonatomic, retain) NSString *message;
+ (instancetype)bodyDicWithErrorcode:(NSString *)errorcode message:(NSString *)message;
@end
BodyDic.m文件#import "BodyDic.h"
@implementation BodyDic
- (void)dealloc
{
[_errorcode release];
[_message release];
[super dealloc];
}
- (instancetype)init
{
self = [super init];
if (self) {
}
return self;
}
+ (instancetype)bodyDicWithErrorcode:(NSString *)errorcode message:(NSString *)message;
{
BodyDic *bDic = [[BodyDic alloc] init];
bDic.errorcode = errorcode;
bDic.message = message;
return [bDic autorelease];
}
@end
{
body = {
errorcode = 1;
message = "错误信息";
};
header = (
{
content = "相册";
image = (
"http://www.hunliji.com1",
"http://www.hunliji.com2",
"http://www.hunliji.com3"
);
page = 10;
title = "婚纱";
}
);
}
#import <Foundation/Foundation.h>
@class BodyDic;
@interface BigDic : NSObject
@property (nonatomic, retain) NSMutableArray *hArr;
@property (nonatomic, retain) BodyDic *bDic;
+ (instancetype)bigDicWithHDic:(NSMutableArray *)hArr bDic:(BodyDic *)bDic;
@end
BigDic.m文件#import "BigDic.h"
#import "BodyDic.h"
@implementation BigDic
- (void)dealloc
{
[_hArr release];
[_bDic release];
[super dealloc];
}
- (instancetype)init
{
self = [super init];
if (self) {
self.hArr = [NSMutableArray array];
self.bDic = [[[BodyDic alloc] init] autorelease];
}
return self;
}
+ (instancetype)bigDicWithHDic:(NSMutableArray *)hArr bDic:(BodyDic *)bDic
{
BigDic *bigDic = [[BigDic alloc] init];
bigDic.hArr = hArr;
bigDic.bDic = bDic;
return [bigDic autorelease];
}
@end
main 中
#import <Foundation/Foundation.h>
#import "HeaderDic.h"
#import "BodyDic.h"
#import "BigDic.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 存images的数组
NSMutableArray *iArr = [NSMutableArray arrayWithObjects:@"http://www.hunliji.com1", @"http://www.hunliji.com2", @"http://www.hunliji.com3", nil];
// HeaderDic类
HeaderDic *hDic = [HeaderDic headerDicWithPage:@"10" title:@"婚纱" content:@"相册" image:iArr];
// header数组
NSMutableArray *hArr = [NSMutableArray arrayWithObjects:hDic, nil];
// BodyDic类
BodyDic *bDic = [BodyDic bodyDicWithErrorcode:@"1" message:@"错误信息"];
// BigDic类
BigDic *bigDic1 = [BigDic bigDicWithHDic:hArr bDic:bDic];
// 打印image数组
NSLog(@"image = %@", [[bigDic1.hArr firstObject] image]);
}
return 0;
}
打印结果:
image = (
"http://www.hunliji.com1",
"http://www.hunliji.com2",
"http://www.hunliji.com3"
)
#import <Foundation/Foundation.h>
@class BigDic;
@class BodyDic;
@class HeaderDic;
@interface Tool : NSObject
+ (BigDic *)returnPage:(NSString *)page title:(NSString *)title content:(NSString *)content image:(NSMutableArray *)iArr errorcode:(NSString *)errorcode message:(NSString *)message;
@end
Tool.m文件#import "Tool.h"
#import "BigDic.h"
#import "BodyDic.h"
#import "HeaderDic.h"
@implementation Tool
+ (BigDic *)returnPage:(NSString *)page title:(NSString *)title content:(NSString *)content image:(NSMutableArray *)iArr errorcode:(NSString *)errorcode message:(NSString *)message
{
// HeaderDic类
HeaderDic *hDic = [HeaderDic headerDicWithPage:page title:title content:content image:iArr];
// header数组
NSMutableArray *hArr = [NSMutableArray arrayWithObjects:hDic, nil];
// BodyDic类
BodyDic *bDic = [BodyDic bodyDicWithErrorcode:errorcode message:message];
// BigDic类
BigDic *bigDic1 = [BigDic bigDicWithHDic:hArr bDic:bDic];
return bigDic1;
}
@end
main 中#import <Foundation/Foundation.h>
#import "HeaderDic.h"
#import "BodyDic.h"
#import "BigDic.h"
#import "Tool.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 类方法 封装
BigDic *bigDic2 = [Tool returnPage:@"10" title:@"婚纱" content:@"相册" image:iArr errorcode:@"1" message:@"错误信息"];
// 打印image数组
NSLog(@"image = %@", [[bigDic2.hArr firstObject] image]);
}
return 0;
}
打印结果:
image = (
"http://www.hunliji.com1",
"http://www.hunliji.com2",
"http://www.hunliji.com3"
)