您的位置:首页 > 移动开发 > IOS开发

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

2015-08-12 10:20 316 查看
先看普通枚举类型的定义:

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就会是一个字符串了。

我相信,如果你遇到这种问题的困惑,依葫芦画瓢应该是可以解决的。当然这里只限定有一个枚举类型的字段,如果是两个甚至更多个,那么不好意思,浪费了你读前面文字的时间了,只是因为我还没遇到。未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: