我需要返回一个数组但不知道该怎么做,这是它的外观
CGPoint position[] = {
CGPointMake(500, 200),
CGPointMake(500, 200)
};
return position;
但我得到一个结果不兼容的错误。有什么办法可以解决这个错误?需要返回多个位置。
我需要返回一个数组但不知道该怎么做,这是它的外观
CGPoint position[] = {
CGPointMake(500, 200),
CGPointMake(500, 200)
};
return position;
但我得到一个结果不兼容的错误。有什么办法可以解决这个错误?需要返回多个位置。
你可以做这样的事情
NSArray *position = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(500, 200)],
[NSValue valueWithCGPoint:CGPointMake(600, 300)],
nil];
从数组中获取值
for(int i=0; i<[position count]; i++) {
NSValue *value = [position objectAtIndex:i];
CGPoint point = [value CGPointValue];
NSLog(@"%@",NSStringFromCGPoint(point);
}
如果您不想使用NSArray
,并且由于 CGPoint 是一个结构,您可以以 C 方式返回它
CGPoint *position = malloc(sizeof(CGPoint)*2);
position[0] = CGPointMake(500,200);
position[1] = CGPointMake(500,200);
return position;
虽然缺点是调用函数不知道数组中元素的数量,但您可能需要以其他方式告诉它。
完成后,您还需要使用 free() 释放返回的数组;
虽然使用NSArray/NSMutableArray
起来更方便。
借助 UIKit,Apple 添加了对 CGPoint 到 NSValue 的支持,因此您可以:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(5.5, 6.6)],
[NSValue valueWithCGPoint:CGPointMake(7.7, 8.8)],
nil];
列出与 CGPoint 一样多的 [NSValue] 实例,并以 nil 结束列表。此结构中的所有对象都是自动释放的。
另一方面,当您从数组中提取值时:
NSValue *val = [points objectAtIndex:0];
CGPoint p = [val CGPointValue];