【发布时间】:2014-08-27 15:39:12
【问题描述】:
我在下面测试这些代码:
BOOL b1 = YES;
BOOL b2 = NO;
BOOL b3 = !b1;
NSNumber *num1 = @(b1);
NSNumber *num2 = @(b2);
NSNumber *num3 = @(b3);
NSNumber *num4 = @(!b1);
num1,num2,num3的objCType([num1 objCType])类型是“c”,但是num4的objcType是“i”。为什么我把bool倒过来,NSNumber的objcType就变了?
============================
我的问题是,我的原始代码是这样的:
BOOL *m_bFirstEvent;
[pDict setValue:**@[[NSNumber numberWithBool:!m_bFristEvent]]** forKey:@"params"];
NSData *pPostData = [NSJSONSerialization dataWithJSONObject:pDict options:0 error:&pError];
the json string is
{"method":"getEvent", "id":7, "params":[false]}
在我使用XCode的refactor->“转换为现代Objective-c语法”之后,代码变为:
BOOL *m_bFirstEvent;
[pDict setValue:**@[@(!m_bFristEvent)]** forKey:@"params"];
NSData *pPostData = [NSJSONSerialization dataWithJSONObject:pDict options:0 error:&pError];
the json string is
{"method":"getEvent", "id":7, "params":[0]}
我怎样才能避免这个 NSNumber Literals 错误并安全地使用 XCode 的 refactor->"convert to modern Objective-c syntax" for NSNumber Literals?
【问题讨论】:
标签: objective-c boolean nsnumber