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就会是一个字符串了。
我相信,如果你遇到这种问题的困惑,依葫芦画瓢应该是可以解决的。当然这里只限定有一个枚举类型的字段,如果是两个甚至更多个,那么不好意思,浪费了你读前面文字的时间了,只是因为我还没遇到。未完待续
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就会是一个字符串了。
我相信,如果你遇到这种问题的困惑,依葫芦画瓢应该是可以解决的。当然这里只限定有一个枚举类型的字段,如果是两个甚至更多个,那么不好意思,浪费了你读前面文字的时间了,只是因为我还没遇到。未完待续
相关文章推荐
- iOS ViewController利用代理页面传值
- iOS popViewControllerAnimated后刷新原先的表格
- ios NSNotificationCenter 消息的收发
- iOS开发中如何向svn服务器commit添加.a文件
- ios-倒计时
- iOS制作毛玻璃效果
- 分析iOS Crash文件:符号化iOS Crash文件的3种方法
- IOS开发之字典
- iOS学习之new与alloc init,[NSArray array] 和 [[NSArray alloc]init] 及 self. 和 _ 的区别
- ios 画虚线
- IOS百度地图SDK报引擎初始化失败
- iOS 代码让手机震动一下
- ios开发(plist文件数据加载) 使用数据模型的方法加载plist文件中的数据
- iOS开发中模拟器归档成功,但是真机归档失败的问题
- 一文让你彻底了解iOS字体相关知识
- 2.ios-NSstring
- iOS测试
- 用CocoaPods做iOS程序的依赖管理
- iOS 隐藏NavigationBar的方法
- iOS delegate