我遇到了一个简单的问题,我找到了一个解决方案:)。
如果我们有这样的话:
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
和这样的属性:
@property (nonatomic, assign) UIViewAutoresizing autoresizingMask;
和此:
self.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth ;
问题是:如何知道UIViewAutoresizing
属性中的项目数(autoresizingMask
)? (在我的例子中我有2个)
答案 0 :(得分:2)
有__builtin_popcount
函数,通常转换为大多数现代硬件上的单个指令。它基本上给出了整数中的设置位数。
答案 1 :(得分:0)
计算选项数量并不常见,通常只需要分别询问您感兴趣的每个选项。
在这种情况下,您可以遍历所有32(64)位并检查有多少位设置为1(天真的解决方案)。
有关更高级的解决方案,请参阅:How to count the number of set bits in a 32-bit integer?
注意,仅当每个选项都指定为1位时,此方法才有效。我仍然建议分别检查每个选项。
if ((self.autoresizingMask & UIViewAutoresizingFlexibleRightMargin) != 0) {
//do something
}
答案 2 :(得分:0)
有两种方法可以做到这一点。
您可以逐个检查包含,然后跟踪哪些或多少。
或者,您创建一组掩码,覆盖所有组合并针对精确匹配进行测试。 (更多样板代码,随着枚举选项的数量增加)