ฉันจะเพิ่มวัตถุ CGPoint ลงใน NSArray ได้อย่างไร?


129

ฉันมีวัตถุ CGPoint ประมาณ 50 ชิ้นที่อธิบายบางสิ่งเช่น "เส้นทาง" และฉันต้องการเพิ่มลงใน NSArray มันจะเป็นวิธีการที่จะส่งคืน CGPoint ที่สอดคล้องกันสำหรับดัชนีที่กำหนด ฉันไม่ต้องการสร้างตัวแปร 50 ตัวเช่น p1 = ... ; p2 = ... และอื่น ๆ มีวิธีง่ายๆที่จะให้ฉันกำหนดจุดเหล่านั้น "ทันที" เมื่อเริ่มต้น NSArray ด้วยวัตถุหรือไม่?

คำตอบ:


324

ด้วยUIKitApple ได้เพิ่มการรองรับ 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];

3
สำหรับประเภทสเกลาร์ให้ดูที่ NSNumber ... คุณจะเห็นตัวสร้างเช่น numberWithBool: numberWithInteger: numberWithFloat :, numberWithUnsignedShort: ฯลฯ
Jarret Hardie

4
หรือคุณสามารถใช้ NSValue ได้โดยตรงเช่น [NSValue valueWithBytes: & someStructSockaddr objCType: @encode (struct sockaddr)]
Jim Dovey

7

ฉันใช้สิ่งนี้:

สร้างอาร์เรย์:

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

รับวัตถุ CGPoint แรก:

CGPoint myPoint = [myArray[0] CGPointValue];

3

คุณยังสามารถเขียนสิ่งนี้ในรูปแบบขั้นต่ำของ:

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

CGPoint p2 = myArray[1];

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.