Bagaimana saya bisa menambahkan objek CGPoint ke NSArray dengan cara mudah?


129

Saya memiliki sekitar 50 objek CGPoint yang menggambarkan sesuatu seperti "jalur", dan saya ingin menambahkannya ke NSArray. Ini akan menjadi metode yang hanya akan mengembalikan CGPoint yang sesuai untuk indeks yang diberikan. Saya tidak ingin membuat 50 variabel seperti p1 = ...; p2 = ..., dan seterusnya. Apakah ada cara mudah yang akan memungkinkan saya untuk mendefinisikan titik-titik "langsung" ketika menginisialisasi NSArray dengan objek?

Jawaban:


324

Dengan UIKitApple menambahkan dukungan untuk CGPoint ke NSValue, sehingga Anda dapat melakukan:

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

Daftarlah sebanyak [NSValue] instance yang Anda miliki CGPoint, dan akhiri daftar di nihil. Semua objek dalam struktur ini dilepaskan secara otomatis.

Di sisi lain, saat Anda menarik nilai dari array:

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

3
Untuk jenis skalar, lihat NSNumber ... Anda akan melihat konstruktor seperti numberWithBool: numberWithInteger: numberWithFloat :, numberWithUnsignedShort :, etc.
Jarret Hardie

4
Atau Anda dapat menggunakan NSValue secara langsung: [NSValue valueWithBytes: & someStructSockaddr objCType: @encode (struct sockaddr)] misalnya.
Jim Dovey

7

Saya menggunakan ini:

Buat array:

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

Dapatkan objek CGPoint pertama:

CGPoint myPoint = [myArray[0] CGPointValue];

3

Anda juga dapat menulis ini dalam bentuk minimal:

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

CGPoint p2 = myArray[1];

2

Apakah Anda sudah melihatnya CFMutableArray? Itu mungkin bekerja lebih baik untuk Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.