【发布时间】:2017-04-11 15:28:23
【问题描述】:
我正在尝试在下一个案例中使用 NS_OPTIONS:
typedef NS_OPTIONS(NSUInteger, FZAnimalType) {
FZAnimalTypeNone = 0,
FZAnimalTypeBear = 1 << 0,
FZAnimalTypeFox = 1 << 1,
FZAnimalTypeWolf = 1 << 2,
FZAnimalTypeTiger = 1 << 3,
FZAnimalTypeLion = 1 << 4,
FZAnimalTypeRabbit = 1 << 5,
FZAnimalTypeGoat = 1 << 6,
FZAnimalTypeParrot = 1 << 7,
FZAnimalTypeDog = 1 << 8,
FZAnimalTypeCat = 1 << 9,
FZAnimalTypeSheep = 1 << 10,
FZAnimalTypeEagle = 1 << 11
};
我有一个警告:
隐式转换丢失整数精度:“unsigned int”到“BOOL”(又名“signed char”)
在以下代码的最后 4 行:
zoo.hasBear = registry.animalTypes & FZAnimalTypeBear;
zoo.hasFox = registry.animalTypes & FZAnimalTypeFox;
zoo.hasWolf = registry.animalTypes & FZAnimalTypeWolf;
zoo.hasTiger = registry.animalTypes & FZAnimalTypeTiger;
zoo.hasLion = registry.animalTypes & FZAnimalTypeLion;
zoo.hasRabbit = registry.animalTypes & FZAnimalTypeRabbit;
zoo.hasGoat = registry.animalTypes & FZAnimalTypeGoat;
zoo.hasParrot = registry.animalTypes & FZAnimalTypeParrot;
zoo.hasDog = registry.animalTypes & FZAnimalTypeDog;
zoo.hasCat = registry.animalTypes & FZAnimalTypeCat;
zoo.hasSheep = registry.animalTypes & FZAnimalTypeSheep;
zoo.hasEagle = registry.animalTypes & FZAnimalTypeEagle;
而属性 hasDog/hasCat/hasSheep/hasEagle - 总是 NO。 这篇文章中的解决方案:64-bit NS_OPTIONS bitmask 没有帮助我。我做错了什么?
【问题讨论】:
-
你应该通过
zoo.hasEagle = (registry.animalTypes & FZAnimalTypeEagle) == FZAnimalTypeEagle来检查位 -
发布定义您的动物园和注册表结构的标头代码。
-
@dan 感谢您的评论,它有效
标签: ios objective-c