以前我有一个方法可以执行一些接收BOOL的任务。
-(void)processUserBasedonStatus:(BOOL)newUser
然后我定义了一个NS_ENUM来接受更多像这样的状态
typedef NS_ENUM(NSInteger, Status)
{
StatusNewUser=0,
StatusCurrentUser,
StatusOldUser,
StatusOther
};
并更新了使用新ENUM参数的方法
-(void)processUserBasedonStatus:(Status)userStatus
一切都运作良好,除了Xcode没有抱怨我忘记更新调用方法的地方,即
[self processUserBasedonStatus:YES];
[self processUserBasedonStatus:NO];
在这种情况下,YES& NO将仅映射到ENUM的前2个值。我在Xcode中尝试了警告列表但没有任何东西允许编译器提出这个警告。
有没有办法让编译器警告我们这种行为?
答案 0 :(得分:0)
在(目标 - )C中,类型_Bool
,char
,int
,long
等及其未签名对应的所有< em>整数类型。 enum
定义的类型不是本身的不同类型,而是其基础整数类型的常量集合。
Objective-C类型BOOL
是typedef
的同义词(#define
或_Bool
)或char
类型之一,具体取决于编译器的版本。
由于整数提升和整数转换,不同整数类型之间的许多分配都是自动且无声的。甚至可以涉及浮点类型,例如:
bool b = true;
float f = b;
完全合法,即使作为警告,也可能被编译器取消注释。
鉴于所有这些问题的答案:
有没有办法让编译器警告我们这种行为?
目前似乎“不” - 代码在(目标 - )C中是完全合法的。但是它可疑并且可能表示错误,并且没有什么能阻止编译器发出警告,就像它对其他一些合法但可疑的构造一样。您可以通过bugreport.apple.com向Apple提交报告(您需要Apple ID才能执行此操作),建议他们添加此类警告。