Як я збільшую NSNumber?
тобто myNSNumber ++
Як я збільшую NSNumber?
тобто myNSNumber ++
Відповіді:
Оновлення: FYI, мені особисто більше подобаються однорядкові відповіді 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];
...
позиція? Це псевдо-код посилання правильно? XCode не...
...
це просто заповнювач будь-якого номера.
Для всіх, хто використовує останню версію Xcode (пишемо це станом на 4.4.1, SDK 5.1), за допомогою об’єктних літералів ви можете очистити код ще трохи ...
NSNumber *x = @(1);
x = @([x intValue] + 1);
// x = 2
Як і раніше боліть боротися з боксом і розпаковувати все, щоб робити прості операції, але це стає краще, або принаймні коротше.
Зберіть їх усі разом, і у вас є:
myNSNumber = @(myNSNumber.intValue + 1);
NSNumber
об’єкти незмінні (?)
Мені подобається крапковий вираз, тому що він більш короткий і саме тому IOS підтримує його в першу чергу:
myNSNumber = [NSNumber numberWithInt:myNSNumber.intValue + 1];
Якщо ви використовуєте його для зберігання цілісного значення:
myNSNumber = @(myNSNumber.longLongValue + 1);
Для матеріалів з плаваючою крапкою коротка відповідь полягає в наступному, але це погана ідея зробити це, ви втратите точність, і якщо ви будете робити якесь порівняння пізніше, як [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);
NSNumber *
завжди перевіряйте, чи вистачить примітивних типів.