我想我想将一个段索引和一个行索引一起打包成一个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并将其添加到行中,但我想提出这样做的限制最少的方法。如果可以的话,我还想避免操作位域。
我该怎么做?
答案 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 };