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?

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];

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];

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];

2

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.