Предупреждающее предупреждение: целочисленная константа не в диапазоне перечисленных типов "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