恼人的警告:整数常量不在枚举类型的范围内' UIViewAnimationOptions'

时间:2013-11-19 19:07:00

标签: ios objective-c c xcode

使用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值一起创建一个未在枚举中明确显示的值,因此它会抱怨。

总的来说,这似乎是一个很好的警告,所以我想保留它。我做错了吗?

1 个答案:

答案 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