我想用尽可能少的代码创建一个整数数组,并将该数组传递给目标C方法。
我试过以下。 sequence
以数组开头并传递给setLights:
但是当在方法中查看sequence
时(通过断点),它不再是数组。
*编辑:我不想使用NSArray,因为整数的NSArray是如此冗长:
使用NSArray:
NSArray *sequence = [[NSArray alloc] initWithObjects: [NSNumber numberWithInt:0], [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], [NSNumber numberWithInt:4],[NSNumber numberWithInt:5],nil];
使用C数组:
int sequence[6] = {0,1,2,3,4,5};
我做错了什么?
- (IBAction)testLights:(id)sender {
int sequence[6] = {0,1,2,3,4,5};
//int *sequence[0][1][2][3][4][5]; //also tried this
[self setLights:sequence];
}
- (void)setLights:(int *)sequence {
UIImageView *light=[lgtArray objectAtIndex: sequence[0]];
light.alpha = 0;
[UIView animateWithDuration:0.3f
animations:^{
light.alpha = 1;
}completion:nil
];
}
答案 0 :(得分:2)
使用此语法传递数组:
- (void)setLights:(int[] )sequence
答案 1 :(得分:1)
你正在遇到一个奇怪的C特征,它通过它的变体传播:[大多]指针和数组的等价。
如果你这样做
int *sequence ;
然后你可以做
sequence [4] ;
或
*(sequence + 4)
阵列和点大多可以互换。 C变体中的数组仅仅是数据分配。你的定义
- (void)setLights:(int *)sequence
不传达信息数组信息。您仍然可以像访问数组一样访问序列。 setLights根本没有关于序列分配给它的元素的内在信息。
这里的问题是你在setLights中对数组的使用需要与你分配数据的方式相匹配。
如果你做了
sequence [100] = 10 ;
它在语法上是正确的,但可能会产生错误。
答案 2 :(得分:1)
只有你想要的才详细说明。请改用文字:
NSArray *sequence = @[@0, @1, @2, @3, @4, @5];
并访问如下值:
UIImageView *light = lgtArray[[sequence[0] intValue]]];