Tôi có khoảng 50 đối tượng CGPoint mô tả thứ gì đó giống như "đường dẫn" và tôi muốn thêm chúng vào NSArray. Nó sẽ là một phương thức mà sẽ chỉ trả về CGPoint tương ứng cho một chỉ mục đã cho. Tôi không muốn tạo 50 biến như p1 = ...; p2 = ..., v.v. Có một cách dễ dàng mà sẽ cho phép tôi để xác định những điểm "ngay lập tức" khi khởi tạo NSArray với các đối tượng?Làm cách nào để thêm các đối tượng CGPoint vào NSArray một cách dễ dàng?
128
A
Trả lời
317
Với UIKit
Apple đã 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];
Danh sách càng nhiều [NSValue] trường hợp là bạn có CGPoint, và kết thúc danh sách trong nil. Tất cả các đối tượng trong cấu trúc này được tự động phát hành.
Ở bên flip, khi bạn kéo các giá trị ra khỏi các mảng:
NSValue *val = [points objectAtIndex:0];
CGPoint p = [val CGPointValue];
2
Bạn đã lấy một cái nhìn tại CFMutableArray
? Điều đó có thể làm việc tốt hơn cho bạn.
7
tôi sử dụng này:
Tạo mảng:
NSArray *myArray = @[[NSValue valueWithCGPoint:CGPointMake(30.0, 150.0)],[NSValue valueWithCGPoint:CGPointMake(41.67, 145.19)]];
Nhận 1 đối tượng CGPoint:
CGPoint myPoint = [myArray[0] CGPointValue];
2
Bạn cũng có thể viết những dòng này trong một tiêu chuẩn C/C++ cách:
CGPoint oldschool[] = { CGPointMake(5.5, 6.6),
CGPointMake(7.7, 8.8) };
CGPoint p2 = oldschool[1];
Tuyệt. Làm thế nào mà sẽ làm việc cho bất kỳ loại vô hướng? – Thanks
Đối với các loại vô hướng, có một cái nhìn tại NSNumber ... bạn sẽ thấy các hàm tạo như numberWithBool: numberWithInteger: numberWithFloat :, numberWithUnsignedShort :, vv –
Hoặc bạn có thể sử dụng NSValue trực tiếp: [NSValue valueWithBytes: & someStructSockaddr objCType: @encode (struct sockaddr)] chẳng hạn. –