Bagaimana cara menaikkan NSNumber?
yaitu myNSNumber ++
Bagaimana cara menaikkan NSNumber?
yaitu myNSNumber ++
Jawaban:
Pembaruan: FYI, saya pribadi lebih suka jawaban satu baris BoltClock dan DarkDusts. Mereka lebih ringkas, dan tidak memerlukan variabel tambahan.
Untuk menaikkan NSNumber
, Anda harus mendapatkan nilainya, menambah itu, dan menyimpannya di yang baru NSNumber
.
Misalnya, untuk NSNumber
memegang integer:
NSNumber *number = [NSNumber numberWithInt:...];
int value = [number intValue];
number = [NSNumber numberWithInt:value + 1];
Atau untuk NSNumber
memegang nomor floating-point:
NSNumber *number = [NSNumber numberWithDouble:...];
double value = [number doubleValue];
number = [NSNumber numberWithDouble:value + 1.0];
...
kepanjangannya? Itu referensi pseudo-code kan? ...
...
hanyalah placeholder untuk nomor apa pun yang Anda inginkan.
NSNumber
objek tidak bisa diubah; hal terbaik yang dapat Anda lakukan adalah mengambil nilai primitif, menaikkannya kemudian membungkus hasilnya ke dalam NSNumber
objeknya sendiri :
NSNumber *bNumber = [NSNumber numberWithInt:[aNumber intValue] + 1];
Bagi siapa saja yang menggunakan Xcode versi terbaru (menulis ini sebagai 4.4.1, SDK 5.1), dengan penggunaan literal objek, Anda dapat membersihkan kode bahkan sedikit lagi ...
NSNumber *x = @(1);
x = @([x intValue] + 1);
// x = 2
Masih agak menyebalkan untuk berurusan dengan tinju dan membuka kotak segalanya untuk melakukan operasi sederhana, tetapi itu menjadi lebih baik, atau setidaknya lebih pendek.
Gabungkan semuanya, dan Anda memiliki:
myNSNumber = @(myNSNumber.intValue + 1);
NSNumber
objek tidak dapat diubah (?)
Saya suka ekspresi titik karena lebih ringkas dan itulah mengapa IOS mendukungnya sejak awal:
myNSNumber = [NSNumber numberWithInt:myNSNumber.intValue + 1];
Jika Anda menggunakannya untuk menyimpan nilai integral:
myNSNumber = @(myNSNumber.longLongValue + 1);
Untuk item floating point, jawaban singkatnya adalah sebagai berikut, tetapi itu ide yang buruk untuk melakukan ini, Anda akan kehilangan ketepatan dan jika Anda melakukan perbandingan apa pun nanti seperti [myNSNumber isEqual: @ (4.5)] Anda mungkin akan terkejut :
myNSNumber = @(myNSNumber.floatValue + 1);
Jika Anda perlu melakukan matematika pada bilangan floating point yang direpresentasikan sebagai objek di Objective-C (yaitu jika Anda perlu meletakkannya dalam array, kamus, dll.), Anda harus menggunakan NSDecimalNumber
.
Gunakan kategori untuk memudahkan penggunaan di masa mendatang. Ini ide dasarnya.
- (void)incrementIntBy:(int)ammount {
self = [NSNumber numberWithInt:(self.intValue + ammount)];
}
Banyak sekali info bagus di jawaban pertanyaan ini. Saya menggunakan jawaban yang dipilih dalam kode saya dan berhasil. Kemudian saya mulai membaca sisa posting dan banyak menyederhanakan kodenya. Ini sedikit lebih sulit untuk dibaca jika Anda tidak terbiasa dengan perubahan pada notasi yang diperkenalkan di Xcode 5, tetapi jauh lebih bersih. Saya mungkin bisa membuatnya hanya satu baris, tapi kemudian agak terlalu sulit untuk memikirkan apa yang saya lakukan.
Saya menyimpan NSNumber dalam kamus dan saya ingin menambahnya. Saya mengerti, mengubahnya menjadi int, menaikkannya sambil mengubahnya menjadi NSNumber, lalu memasukkannya kembali ke kamus.
Kode Lama
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
int correctValue = [correct intValue];
correct = [NSNumber numberWithInt:correctValue + 1];
[scoringDictionary removeObjectForKey:@"correct"];
scoringDictionary[@"correct"] = correct;
Kode baru
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
scoringDictionary[@"correct"] = @(correct.intValue + 1);
NSNumber *
, selalu periksa untuk melihat apakah tipe primitif sudah cukup.