使用clang设置为C11 / C ++ 11在XCode 5中编写如下代码时:
[UIView animateWithDuration:0.5
delay:0
options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat
animations:^{
self.imgCheckIn.backgroundColor = [UIColor redColor];
}
completion:nil];
options
字段会生成以下警告:
integer constant not in range of enumerated type 'UIViewAnimationOptions' (aka 'enum UIViewAnimationOptions') [-Wassign-enum]
问题似乎是该方法采用UIViewAnimationOptions
类型,这只是NSUInteger
的枚举。但是,OR'ing值一起创建一个未在枚举中明确显示的值,因此它会抱怨。
总的来说,这似乎是一个很好的警告,所以我想保留它。我做错了吗?
答案 0 :(得分:33)
你没有做错任何事。正如你已经注意到的那样,编译器抱怨因为
value不是枚举中定义的值。 (编译器标志-Weverything
表示此检查。)
您可以通过显式转换抑制警告:
options:(UIViewAnimationOptions)(UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat)
或使用#pragma
:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wassign-enum"
[UIView animateWithDuration:0.5
delay:0
options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat
animations:^{
self.imgCheckIn.backgroundColor = [UIColor redColor];
}
completion:nil];
#pragma clang diagnostic pop