Как я могу добавить объекты CGPoint в NSArray простым способом? - PullRequest
129 голосов
/ 22 мая 2009

У меня есть около 50 объектов CGPoint, которые описывают что-то вроде «пути», и я хочу добавить их в NSArray. Это будет метод, который будет просто возвращать соответствующий CGPoint для данного индекса. Я не хочу создавать 50 переменных, таких как p1 = ...; p2 = ... и так далее. Есть ли простой способ, который позволил бы мне определить эти точки "мгновенно" при инициализации NSArray с объектами?

Ответы [ 4 ]

321 голосов
/ 22 мая 2009

С UIKit Apple добавила поддержку CGPoint для NSValue, поэтому вы можете сделать:

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

Перечислите столько экземпляров [NSValue], сколько у вас есть CGPoint, и завершите список нулем. Все объекты в этой структуре автоматически высвобождаются.

С другой стороны, когда вы извлекаете значения из массива:

NSValue *val = [points objectAtIndex:0];
CGPoint p = [val CGPointValue];
7 голосов
/ 06 мая 2014

Я использую это:

Создать массив:

NSArray *myArray = @[[NSValue valueWithCGPoint:CGPointMake(30.0, 150.0)],[NSValue valueWithCGPoint:CGPointMake(41.67, 145.19)]];

Получить 1-й объект CGPoint:

CGPoint myPoint = [myArray[0] CGPointValue];
3 голосов
/ 31 мая 2015

Вы также можете написать это в минимальной форме:

CGPoint myArray[] = { CGPointMake(5.5, 6.6), CGPointMake(7.7, 8.8) };

CGPoint p2 = myArray[1];
2 голосов
/ 22 мая 2009

Вы смотрели на CFMutableArray? Это может работать лучше для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...