将结构分配给Objective C中的int值

时间:2015-01-28 21:33:40

标签: ios objective-c uiview struct

我想我想将一个段索引和一个行索引一起打包成一个int,并将结果赋值给UIView的tag属性。我以为我可以这样做,但它不起作用:

typedef struct
{
    int16_t section;
    int16_t row;
} SecRow;

SecRow sr = {2,3};
UIView* aview = [[UIView alloc] init];
[aview setTag:sr];//Error - Sending ‘SecRow’ to parameter of incompatible type ’NSInteger’ (aka ‘int’)
or
[aview setTag:(int32_t)sr];//Error - Operand of type ‘SecRow’ where arithmetic or pointer type is required

我意识到这会限制截面和行的最大值,但我认为16位应该足够了。在过去,我只是将section乘以1000或10000并将其添加到行中,但我想提出这样做​​的限制最少的方法。如果可以的话,我还想避免操作位域。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以使用union

typedef union {
  struct {
    int16_t section;
    int16_t row;
  } fields;
  int32_t bits;
} SecRow;

然后sr.bits。它确实使你的作业更长一点:

SecRow sr = { .fields.section = 2, .fields.row = 3 };