如何以简单的方式将CGPoint对象添加到NSArray?

Tha*_*nks 129 iphone cocoa-touch objective-c uikit ios

我有大约50个CGPoint对象描述类似"路径"的东西,我想将它们添加到NSArray中.它将是一个只返回给定索引的相应CGPoint的方法.我不想创建50个变量,如p1 = ...; p2 = ...,依此类推.有一种简单的方法可以让我在用对象初始化NSArray时"立即"定义这些点吗?

Jar*_*die 323

随着UIKitApple增加对CGPoint的支持NSValue,您可以这样做:

NSArray *points = [NSArray arrayWithObjects:
                     [NSValue valueWithCGPoint:CGPointMake(5.5, 6.6)],
                     [NSValue valueWithCGPoint:CGPointMake(7.7, 8.8)],
                     nil];
Run Code Online (Sandbox Code Playgroud)

列出与CGPoint一样多的[NSValue]实例,并以nil结束列表.此结构中的所有对象都是自动释放的.

另一方面,当您从数组中提取值时:

NSValue *val = [points objectAtIndex:0];
CGPoint p = [val CGPointValue];
Run Code Online (Sandbox Code Playgroud)

  • 或者,您可以直接使用NSValue:[NSValue valueWithBytes:&someStructSockaddr objCType:@encode(struct sockaddr)]. (4认同)
  • 对于标量类型,请查看NSNumber ...您将看到numberWithBool等构造函数:numberWithInteger:numberWithFloat:,numberWithUnsignedShort:等. (3认同)

Tib*_*abo 7

我用这个:

创建数组:

NSArray *myArray = @[[NSValue valueWithCGPoint:CGPointMake(30.0, 150.0)],[NSValue valueWithCGPoint:CGPointMake(41.67, 145.19)]];
Run Code Online (Sandbox Code Playgroud)

获取第一个CGPoint对象:

CGPoint myPoint = [myArray[0] CGPointValue];
Run Code Online (Sandbox Code Playgroud)