2012-03-14 41 views
36

Câu hỏi nhanh - có thể đưa NSInteger vào đối tượng NSNumber không? Tôi cần phải chuyển đổi thẻ của một đối tượng UIImageView thành một đối tượng NSNumber bởi vì tôi cần truyền nó như một đối số cho một hàm.Có thể bỏ NSInteger vào NSNumber không?

+0

Nó hoàn toàn có thể bỏ một NSInteger một NSNumber *. Kết quả sẽ rất có thể dẫn đến sự cố. Tất nhiên nếu bạn có một số x, bạn có thể sử dụng @ (x) để tạo một đối tượng NSNumber với giá trị x. Mà sẽ làm việc, nhưng không phải là một diễn viên. – gnasher729

Trả lời

99

Bạn không thể truyềnNSInteger không phải là đối tượng, chỉ là bí danh cho loại được cài sẵn. Bạn luôn có thể tạo ra một đối tượng mới NSNumber từ NSInteger, như thế này:

NSNumber *myNum = @(myNsIntValue); 

hoặc trong phiên bản trước của trình biên dịch, sử dụng

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue]; 
+1

Câu trả lời này tạo ra cảnh báo về các thiết bị 64 bit mới. Vui lòng xem câu trả lời chính xác hơn của @ Kevin bên dưới. –

+0

@FullDecent Đã chỉnh sửa, cảm ơn! – dasblinkenlight

6

Đây là câu trả lời chính xác hơn và nó sẽ không tạo ra bất ngờ lỗi.

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue]; 

Do doc cho biết:

"numberWithInteger:. Tạo và trả về một đối tượng NSNumber chứa một giá trị nhất định, xử lý nó như một NSInteger"

"numberWithInt: Tạo và trả về đối tượng NSNumber có chứa giá trị đã cho, coi nó là int đã ký".

15

từ Apple LLVM Compiler 4.0, có một cách dễ dàng hơn để tạo NSNumber đối tượng:

NSNumber *x = @1234; 
NSNumber *y = @(anIntegerVariable); 
+1

NSNumber * z = @ (aDoubleValue); cũng hoạt động tốt. – gnasher729

Các vấn đề liên quan