Làm cách nào tôi có thể thêm các đối tượng CGPoint vào NSArray một cách dễ dàng?


129

Tôi có khoảng 50 đối tượng CGPoint mô tả một cái gì đó giống như "đường dẫn" và tôi muốn thêm chúng vào NSArray. Đây sẽ là một phương thức sẽ trả về CGPoint tương ứng cho một chỉ mục nhất định. Tôi không muốn tạo 50 biến như p1 = ...; p2 = ..., v.v. Có cách nào dễ dàng cho phép tôi xác định các điểm đó "ngay lập tức" khi khởi tạo NSArray với các đối tượng không?

Câu trả lời:


324

Với UIKitApple đã thêm hỗ trợ cho CGPoint NSValue, vì vậy bạn có thể làm:

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

Liệt kê càng nhiều trường hợp [NSValue] khi bạn có CGPoint và kết thúc danh sách trong không. Tất cả các đối tượng trong cấu trúc này được tự động phát hành.

Mặt trái, khi bạn kéo các giá trị ra khỏi mảng:

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

3
Đối với các loại vô hướng, hãy xem NSNumber ... bạn sẽ thấy các hàm tạo như numberWithBool: numberWithInteger: numberWithFloat:, numberWithUnsignShort:, v.v.
Jarret Hardie

4
Ngoài ra, bạn có thể sử dụng NSValue trực tiếp: [NSValue valueWithBytes: & someSturationSockaddr objCType: @encode (struct sockaddr)] chẳng hạn.
Jim Dovey

7

Tôi sử dụng cái này:

Tạo mảng:

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

Nhận đối tượng CGPoint đầu tiên:

CGPoint myPoint = [myArray[0] CGPointValue];

3

Bạn cũng có thể viết điều này trong một hình thức tối thiểu:

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

CGPoint p2 = myArray[1];

2

Bạn đã xem qua CFMutableArray? Điều đó có thể làm việc tốt hơn cho bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.