IOS:将JSONMdel中的枚举类型转换为字符串(如果你想,当然也可以是任何你想要的数据类型)

先看普通枚举类型的定义:
typedef NS_ENUM(NSUInteger, EnumTest){
    no_start = 0,
    doing = 1,
    done = 2
};
这个枚举类型名字叫:EnumTest,而枚举类型中的这些定义的数据类型是NSUInteger,实际上它通常/只能是Integer相关的类型。
但是如果服务器返回JSON的时候,可能是某些字符串,而这些字符串在客户端用Enum表示会简单的情况下我们当然要用Enum来表示了。比如:服务器返回的这个类型的数据(假设返回的名字叫做Type)会是:read,listen,write,用了JSONModel 你将会知道假如我们定义一个JSONModel子类,其中它的一个属性Type为NSString*,那么在解析的时候将会成功解析出来Type的值。但是,如果我们定义这样一个枚举类型:
typedef NS_ENUM(NSUInteger, EnumType){
    read,
    listen,
    write
};
如果将Type的数据类型那个NSString换做是EnumType的话,解析可能导致Type一直为read(默认为0)甚至直接出错(这回根据你代码的编写情况而定)。所以为了使服务器返回的NSString*类型的数据成功的转化为客户端的枚举类型,或者是客户端的枚举类型在传给服务器参数的时候转换做NSString*类型的数据我们可以这样做
1、首先在定义这个枚举类型的.h头文件定义两个函数/方法,因为我们要实现并用到它们
NSString* getEnumTestName(enum  EnumTest action);
enum TaskStatus getEnumTestByName(NSString* name);

在.m文件中这样去实现
NSString* getEnumTestName(enum TaskStatus action){
    switch (action) {
        case read:
            return @“read";
            break;
        case lesten:
            return @“listen";
        case write:
            return @“write";
        default:
            return @"";
            break;
    }
}

enum TaskStatus getEnumTestByName(NSString* name){
    if([name isEqualToString:@"read"]) {
        return  read;
    } else if([name isEqualToString:@"listen"]){
        return  listen;
    } else if([name isEqualToString:@"write"]){
        return  write;
    }else{
        return read;
    }
}

2、在你用到这个枚举类型EnumTest的JSONModel子类的.m文件中,实现这两个方法(当然前提是定义一个字段type,且为EnumTest类型):
-(void)setEnumTestWithNSString:(NSString*)str
{
    _type = getEnumTesByName(str);
}

-(id)JSONObjectForActionType
{
    return getEnumTesName(_type);
}
这样,在你解析JSON之后,获取的EnumTest就会是一个字符串了。

我相信,如果你遇到这种问题的困惑,依葫芦画瓢应该是可以解决的。当然这里只限定有一个枚举类型的字段,如果是两个甚至更多个,那么不好意思,浪费了你读前面文字的时间了,只是因为我还没遇到。未完待续
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值