回答
更新:僅供參考,我個人比較喜歡BoltClock的和DarkDusts的一個在線回答更好。它們更簡潔,不需要額外的變量。
爲了增加一個NSNumber
,你將必須得到它的價值,增加的是,並將其存儲在一個新的NSNumber
。
例如,對於一個NSNumber
持有整數
NSNumber *number = [NSNumber numberWithInt:...];
int value = [number intValue];
number = [NSNumber numberWithInt:value + 1];
或爲NSNumber
拿着浮點數:
NSNumber *number = [NSNumber numberWithDouble:...];
double value = [number doubleValue];
number = [NSNumber numberWithDouble:value + 1.0];
這是我討厭核心數據中的NSNumber屬性的頭號原因。 NSNumber非常不方便使用和執行數學。 – 2011-10-04 18:51:20
再次使用零進行初始化時,NSNumber不起作用,從而產生垃圾值。 – 2013-12-13 06:03:06
NSNumber
對象是不可變;你能做的最好的就是抓住原始值,然後增加它包住結果在自己NSNumber
對象:
NSNumber *bNumber = [NSNumber numberWithInt:[aNumber intValue] + 1];
打我一秒......;) – 2011-01-25 12:00:48
我挖這一行;謝謝。 – 2012-07-30 16:18:01
現代語言:1,Objective-C:0. – devios1 2013-08-11 21:33:07
NSNumbers是不可變的,你必須創建一個新的實例。
// Work with 64 bit to support very large values
myNSNumber = [NSNumber numberWithLongLong:[myNSNumber longLongValue] + 1];
// EDIT: With modern syntax:
myNSNumber = @([myNSNumber longLongValue] + 1);
對於誰正在使用最新版本的Xcode的任何人(寫這爲4.4.1,SDK 5.1),使用對象的文字,你可以清理代碼起來更有點..
NSNumber *x = @(1);
x = @([x intValue] + 1);
// x = 2
仍然是一種痛苦的處理拳擊和拆箱的一切做簡單的操作,但它越來越好,或至少更短。
我喜歡點的表達,因爲它更簡潔,這就是爲什麼IOS支持它擺在首位:
myNSNumber = [NSNumber numberWithInt:myNSNumber.intValue + 1];
把它們放在一起,你必須:
myNSNumber = @(myNSNumber.intValue + 1);
如果您使用它來存儲積分值:
myNSNumber = @(myNSNumber.longLongValue + 1);
F或浮點數的東西,但簡短的回答是以下內容,但這樣做不好,你會失去精確性,如果你稍後進行任何形式的比較,比如[myNSNumber isEqual:@(4.5)],你可能會感到驚訝:
myNSNumber = @(myNSNumber.floatValue + 1);
如果您需要對在Objective-C中表示爲對象的浮點數進行數學運算(即如果你需要把它們放入數組,字典等),你應該使用NSDecimalNumber
。
使用一個類別來減輕將來的使用。這是一個基本的想法。
- (void)incrementIntBy:(int)ammount {
self = [NSNumber numberWithInt:(self.intValue + ammount)];
}
在這個問題的答案很多很好的信息。我在我的代碼中使用了選定的答案,它工作。然後我開始閱讀其餘的帖子並簡化了代碼。如果您不熟悉Xcode 5中引入的符號更改,但閱讀起來會更困難一些,但它會更清晰。我可能只是把它做成一行,但是弄清楚我在做什麼有點太難了。
我在字典中存儲了一個NSNumber,我想增加它。我得到它,將其轉換爲int,在將其轉換爲NSNumber時遞增,然後將其放回到字典中。
舊代碼
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
int correctValue = [correct intValue];
correct = [NSNumber numberWithInt:correctValue + 1];
[scoringDictionary removeObjectForKey:@"correct"];
scoringDictionary[@"correct"] = correct;
新代碼
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
scoringDictionary[@"correct"] = @(correct.intValue + 1);
- 1. 遞增一個NSNumber
- 2. 如何每5秒增加一個NSNumber的值?
- 3. 用NSNumber對象增長一個NSMutableArray
- 4. 如何增加一個NSDate
- 5. iOS可以增加一個NSNumber,還是我需要創建一個新的?
- 6. 從另一個NSNumber行爲創建NSNumber?
- 7. 增量的NSNumber內GCD塊
- 8. 如何在mongodb中增加一個id
- 9. 如何增加到下一個號碼
- 10. 如何增加一個DataGrid列
- 11. 如何增加一個觀察值?
- 12. 如何增加一個全局變量?
- 13. 如何增加下一個變量?
- 14. 我該如何增加一個for?
- 15. 如何增加一個按鈕到Firefox?
- 16. 如何增加一個NSUInteger變量?
- 17. 如何增加一個`Slider`控制
- 18. Python:我如何增加一個字符?
- 19. 增加「下一個」
- 20. 改變一個NSNumber的值
- 21. 如何增加這個transform.translate
- 22. 一個比較向的NSNumber一個int
- 23. 如何從一個號碼增加到另一個號碼?
- 24. 如何在一個CRON中增加一個PHP變量
- 25. 如何添加一個自動增量到一個doctrinemigration列?
- 26. 如何增加一箇中繼器的行隨着文本的增加?
- 27. 如何比較兩個NSNumber號碼?
- 28. 增加一個選項,如Facebook或Flickr
- 29. 增加一個ASP.Net網頁
- 30. 點擊增加一個值
記住:使用`的NSNumber *`時,經常檢查,看看是否基本類型就足夠了。 – 2013-01-18 17:52:02
我很驚訝,沒有答案提供快速/優化的方式,因爲只是爲了增加值,您需要查詢,組合並創建新對象,因此在循環中執行此操作可能會耗費大量時間。 – PetrV 2014-06-14 12:00:34