从objective-c中的NS_OPTION中定义的集合中选择随机值的最优雅方法是什么?

时间:2013-11-05 02:04:42

标签: objective-c enums bitmask arc4random

我有一个我正在定义的NS_OPTION:

 typedef NS_OPTIONS(NSInteger, PermittedSize) {
  SmallSize = 1 << 0,
  MediumSize = 1 << 1,
  LargeSize = 1 << 2
 }; 

后来我设置了我需要的值:

 PermittedSize size = SmallSize | MediumSize;

我正在使用它为特定级别的游戏随机生成各种中小尺寸(duh)对象。 选择要生成的对象大小的最佳方法是什么?意思是,我想为我正在生成的每个对象随机选择它是否是允许的两个选项之一(在这种情况下是小和中)。通常我会使用arc4random函数和我需要的数字范围 - 但在这种情况下,如何使用位来完成? (然后映射回PermittedSize类型的值?

2 个答案:

答案 0 :(得分:2)

使用arc4random的结果来确定您想要进行的位移量。像这样:

int bitShiftAmount = arc4random_uniform(numberOfPermittedSizes);
PermittedSize size = 1 << bitShiftAmount;

答案 1 :(得分:1)

您仍在使用整数。 SmallSize为1. MediumSize为2. LargeSize4

因此从1到3中选择一个随机数.1很小,2是中等,3是两者。

一旦有了随机数,请指定它。

NSInteger val = arc4random_uniform(3) + 1; // give 1-3
PermittedSize size = (PermittedSize)val;