NSArray'e CGPoint nesnelerini kolay yoldan nasıl ekleyebilirim?


129

"Yol" gibi bir şeyi tanımlayan yaklaşık 50 CGPoint nesnem var ve bunları bir NSArray'e eklemek istiyorum. Bu, belirli bir dizin için karşılık gelen CGPoint'i döndürecek bir yöntem olacak. P1 = ... gibi 50 değişken oluşturmak istemiyorum; p2 = ... vb. NSArray'i nesnelerle başlatırken bu noktaları "anında" tanımlamama izin verecek kolay bir yol var mı?

Yanıtlar:


324

İle UIKitApple için CGPoint desteği eklendi NSValuebunu yapabilirsiniz:

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

CGPoint'e sahip olduğunuz kadar [NSValue] örneğini listeleyin ve listeyi sıfırla sonlandırın. Bu yapıdaki tüm nesneler otomatik olarak serbest bırakılır.

Kapak tarafında, değerleri diziden çekerken:

NSValue *val = [points objectAtIndex:0];
CGPoint p = [val CGPointValue];

3
Skaler türler için, NSNumber'a bir göz atın ... numberWithBool: numberWithInteger: numberWithFloat :, numberWithUnsignedShort :, vb. Gibi kurucular göreceksiniz.
Jarret Hardie

4
Alternatif olarak, örneğin NSValue'yu doğrudan kullanabilirsiniz: [NSValue valueWithBytes: & someStructSockaddr objCType: @encode (struct sockaddr)].
Jim Dovey

7

Bunu kullanıyorum:

Dizi oluştur:

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

1. CGPoint nesnesini alın:

CGPoint myPoint = [myArray[0] CGPointValue];

3

Bunu asgari bir biçimde de yazabilirsiniz:

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

CGPoint p2 = myArray[1];

2

Baktın CFMutableArraymı Bu senin için daha iyi olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.