Làm cách nào để tăng số NSN?
tức là myNSNumber ++
Làm cách nào để tăng số NSN?
tức là myNSNumber ++
Câu trả lời:
Cập nhật: FYI, cá nhân tôi thích câu trả lời một dòng của BoltClock và DarkDusts hơn. Chúng ngắn gọn hơn và không yêu cầu các biến bổ sung.
Để tăng một NSNumber
, bạn sẽ phải lấy giá trị của nó, tăng giá trị đó và lưu trữ nó trong một giá trị mới NSNumber
.
Ví dụ, đối với NSNumber
một số nguyên đang giữ:
NSNumber *number = [NSNumber numberWithInt:...];
int value = [number intValue];
number = [NSNumber numberWithInt:value + 1];
Hoặc để NSNumber
giữ một số dấu phẩy động:
NSNumber *number = [NSNumber numberWithDouble:...];
double value = [number doubleValue];
number = [NSNumber numberWithDouble:value + 1.0];
...
giá đỡ cho cái gì? Đó là một tham chiếu mã giả phải không? XCode thì không...
...
chỉ là một trình giữ chỗ cho bất kỳ số nào bạn muốn.
Đối với bất kỳ ai đang sử dụng phiên bản mới nhất của Xcode (viết phiên bản này là 4.4.1, SDK 5.1), với việc sử dụng các ký tự đối tượng, bạn có thể làm sạch mã hơn một chút ...
NSNumber *x = @(1);
x = @([x intValue] + 1);
// x = 2
Vẫn còn hơi khó khăn khi đối phó với quyền anh và mở hộp mọi thứ để thực hiện các thao tác đơn giản, nhưng nó đang trở nên tốt hơn, hoặc ít nhất là ngắn hơn.
Đặt tất cả chúng lại với nhau và bạn có:
myNSNumber = @(myNSNumber.intValue + 1);
NSNumber
đối tượng là không thay đổi (?)
Tôi thích biểu thức dấu chấm vì nó ngắn gọn hơn và đó là lý do tại sao IOS hỗ trợ nó ngay từ đầu:
myNSNumber = [NSNumber numberWithInt:myNSNumber.intValue + 1];
Nếu bạn đang sử dụng nó để lưu trữ một giá trị tích phân:
myNSNumber = @(myNSNumber.longLongValue + 1);
Đối với nội dung dấu phẩy động, câu trả lời ngắn gọn là như sau, nhưng thực hiện điều này là một ý tưởng tồi, bạn sẽ mất độ chính xác và nếu bạn thực hiện bất kỳ loại so sánh nào sau này như [myNSNumber isEqual: @ (4.5)], bạn có thể ngạc nhiên :
myNSNumber = @(myNSNumber.floatValue + 1);
Nếu bạn cần làm toán về số dấu phẩy động được biểu diễn dưới dạng các đối tượng trong Objective-C (tức là nếu bạn cần đặt chúng trong mảng, từ điển, v.v.) thì bạn nên sử dụng NSDecimalNumber
.
Sử dụng một danh mục để dễ dàng sử dụng trong tương lai. Đây là một ý tưởng cơ bản.
- (void)incrementIntBy:(int)ammount {
self = [NSNumber numberWithInt:(self.intValue + ammount)];
}
Rất nhiều thông tin tốt trong câu trả lời cho câu hỏi này. Tôi đã sử dụng câu trả lời đã chọn trong mã của mình và nó đã hoạt động. Sau đó, tôi bắt đầu đọc phần còn lại của các bài đăng và đơn giản hóa mã rất nhiều. Sẽ khó đọc hơn một chút nếu bạn không quen với những thay đổi trong ký hiệu được giới thiệu trong Xcode 5, nhưng nó rõ ràng hơn rất nhiều. Tôi có lẽ chỉ có thể làm cho nó chỉ một dòng, nhưng sau đó hơi khó để tìm ra những gì tôi đang làm.
Tôi đang lưu trữ Số NSN trong từ điển và tôi muốn tăng nó lên. Tôi hiểu nó, chuyển nó thành int, tăng nó trong khi chuyển nó thành NSNumber, sau đó đưa nó trở lại từ điển.
Mã cũ
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
int correctValue = [correct intValue];
correct = [NSNumber numberWithInt:correctValue + 1];
[scoringDictionary removeObjectForKey:@"correct"];
scoringDictionary[@"correct"] = correct;
Mã mới
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
scoringDictionary[@"correct"] = @(correct.intValue + 1);
NSNumber *
, hãy luôn kiểm tra xem các kiểu nguyên thủy có đủ hay không.