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?
Trả lời
Bạn không thể truyền vì NSInteger
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];
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. –
@FullDecent Đã chỉnh sửa, cảm ơn! – dasblinkenlight
Đâ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ý".
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);
NSNumber * z = @ (aDoubleValue); cũng hoạt động tốt. – gnasher729
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