NSNumber'ı nasıl artırabilirim?
yani myNSNumber ++
NSNumber'ı nasıl artırabilirim?
yani myNSNumber ++
Yanıtlar:
Güncelleme: Bilginize, şahsen BoltClock ve DarkDusts'ın tek satırlık cevaplarını daha çok beğeniyorum. Daha özlüdürler ve ek değişkenler gerektirmezler.
An NSNumberdeğerini artırmak için değerini almanız, artırmanız ve yenisinde saklamanız gerekir NSNumber.
Örneğin, NSNumbertutan bir tam sayı için:
NSNumber *number = [NSNumber numberWithInt:...];
int value = [number intValue];
number = [NSNumber numberWithInt:value + 1];
Veya NSNumberbir kayan noktalı sayı tutmak için:
NSNumber *number = [NSNumber numberWithDouble:...];
double value = [number doubleValue];
number = [NSNumber numberWithDouble:value + 1.0];
...? Bu bir sözde kod referansı değil mi? XCode ...
...İstediğiniz herhangi bir sayı için sadece bir yer tutucudur.
Xcode'un en son sürümünü kullanan herkes için (bunu 4.4.1, SDK 5.1'den itibaren yazıyor), nesne değişmezlerini kullanarak kodu biraz daha temizleyebilirsiniz ...
NSNumber *x = @(1);
x = @([x intValue] + 1);
// x = 2
Yine de basit operasyonlar yapmak için boks yapmak ve her şeyi kutudan çıkarmakla uğraşmak biraz acı verici, ama daha iyi ya da en azından kısalıyor.
Hepsini bir araya getirirseniz:
myNSNumber = @(myNSNumber.intValue + 1);
NSNumberNesneler değişmez olduğu için buna izin verilmediğini düşündüm (?)
Nokta ifadesini seviyorum çünkü daha kısa ve bu yüzden IOS ilk etapta onu destekliyor:
myNSNumber = [NSNumber numberWithInt:myNSNumber.intValue + 1];
İntegral bir değer depolamak için kullanıyorsanız:
myNSNumber = @(myNSNumber.longLongValue + 1);
Kayan noktalı şeyler için kısa cevap şudur, ancak bunu yapmak kötü bir fikirdir, hassasiyeti kaybedersiniz ve daha sonra [myNSNumber isEqual: @ (4.5)] gibi herhangi bir karşılaştırma yaparsanız şaşırabilirsiniz :
myNSNumber = @(myNSNumber.floatValue + 1);
Objective-C'de nesneler olarak temsil edilen kayan nokta sayıları üzerinde matematik yapmanız gerekiyorsa (yani onları dizilere, sözlüklere vb. Koymanız gerekiyorsa) kullanmalısınız NSDecimalNumber.
İleride kullanımı kolaylaştırmak için bir kategori kullanın. İşte temel bir fikir.
- (void)incrementIntBy:(int)ammount {
self = [NSNumber numberWithInt:(self.intValue + ammount)];
}
Bu sorunun yanıtlarında pek çok iyi bilgi var. Seçilen cevabı kodumda kullandım ve işe yaradı. Sonra geri kalan yazıları okumaya başladım ve kodu çok basitleştirdim. Xcode 5'te tanıtılan notasyondaki değişikliklere aşina değilseniz okumak biraz daha zordur, ancak çok daha temizdir. Muhtemelen tek bir satır yazabilirim, ama sonra ne yaptığımı anlamak biraz zor.
Bir sözlüğe bir NSNumber kaydediyorum ve onu artırmak istiyorum. Anladım, int'e dönüştürüyorum, NSNumber'a dönüştürürken artırıyorum, sonra sözlüğe geri koyuyorum.
Eski Kod
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
int correctValue = [correct intValue];
correct = [NSNumber numberWithInt:correctValue + 1];
[scoringDictionary removeObjectForKey:@"correct"];
scoringDictionary[@"correct"] = correct;
Yeni kod
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
scoringDictionary[@"correct"] = @(correct.intValue + 1);
NSNumber *, her zaman ilkel türlerin yeterli olup olmayacağını kontrol edin.