字典转model类、封装(OC中)

本文详细介绍了如何将字典转换为model类,实现了封装,通过具体实例展示了普通写法、字典转model类及封装方法的实现过程,并对比了它们的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 = "婚纱";

            }

        );

    }

)


1. 普通写法

main 中
#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 = "婚纱";

}


HeaderDic.h文件

#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

HeaderDic.m文件

#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


2.2 BodyDic:

{

    errorcode = 1;

    message = "错误信息";

}

BodyDic.h文件
#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

2.3 BigDic:

{

    body =         {

        errorcode = 1;

        message = "错误信息";

    };

    header =         (

                    {

            content = "相册";

            image =                 (

                "http://www.hunliji.com1",

                "http://www.hunliji.com2",

                "http://www.hunliji.com3"

            );

            page = 10;

            title = "婚纱";

        }

    );

}

BigDic.h文件
#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"

)


3. 封装
将第2种方法中main中的重复的代码封装到Tool类中
Tool.h文件
#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"

)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值