Jak w łatwy sposób mogę dodać obiekty CGPoint do NSArray?

129

Mam około 50 obiektów CGPoint, które opisują coś w rodzaju „ścieżki” i chcę dodać je do NSArray. Będzie to metoda, która po prostu zwróci odpowiedni CGPoint dla danego indeksu. Nie chcę tworzyć 50 zmiennych, takich jak p1 = ...; p2 = ... i tak dalej. Czy istnieje łatwy sposób, który pozwoliłby mi „natychmiast” zdefiniować te punkty podczas inicjowania NSArray z obiektami?

Dzięki
źródło

Odpowiedzi:

325

Dzięki UIKitdodanej obsłudze CGPoint firmy Apple NSValuemożesz:

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

Wypisz tyle instancji [NSValue], ile masz CGPoint, i zakończ listę na zero. Wszystkie obiekty w tej strukturze są automatycznie zwalniane.

Z drugiej strony, kiedy wyciągasz wartości z tablicy:

NSValue *val = [points objectAtIndex:0];
CGPoint p = [val CGPointValue];
Jarret Hardie
źródło
3
W przypadku typów skalarnych spójrz na NSNumber ... zobaczysz konstruktory takie jak numberWithBool: numberWithInteger: numberWithFloat :, numberWithUnsignedShort: itp.
Jarret Hardie
4
Alternatywnie możesz użyć NSValue bezpośrednio: na przykład [NSValue valueWithBytes: & someStructSockaddr objCType: @encode (struct sockaddr)].
Jim Dovey
7

Używam tego:

Utwórz tablicę:

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

Pobierz pierwszy obiekt CGPoint:

CGPoint myPoint = [myArray[0] CGPointValue];
Tibidabo
źródło
3

Możesz również napisać to w minimalnej formie:

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

CGPoint p2 = myArray[1];
GilesDMiddleton
źródło
2

Czy spojrzałeś na CFMutableArray? To może działać lepiej dla ciebie.

Ramin
źródło