Предупреждающее предупреждение: целочисленная константа не в диапазоне перечисленных типов "UIViewAnimationOptions"

При написании кода, подобного приведенному в XCode 5, с помощью clang, установленного на C11/С++ 11:

[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

Вы ничего не делаете неправильно. Как вы уже заметили, компилятор жалуется, потому что 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