NSNumber'ı NSString'e dönüştürme


132

Yani s ve s NSArrayiçeren bir "myArray" var . Onlara bir başkasında ihtiyacım var, bu yüzden şöyle yapıyorum :NSNumberNSStringUIView

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

DetailViewController *details = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
details.subjectText = [[myArray objectAtIndex:indexPath.row] objectForKey:@"subject"];

SubjectText çalışır. Ama bundan nasıl kurtulabilirim NSNumber? Ben dönüştürmek istiyorum (aslında ... dizeleri olarak onlara ihtiyacım) NSStringa out NSNumberböyle: NSString *blah = [NSNumber intValue]. Ama yukarıdaki kodda nasıl kuracağımı bilmiyorum ...


Diziniz, kullanımına bakılırsa, aslında sözlükler içeriyor gibi görünüyor objectForKey. Bu nedenle, dönüştürmeye başlamadan önce bundan uygun değerleri çıkarmanız gerekir. NSNumber dahil çoğu Cocoa nesnesi türünün, descriptionyöntemi çağırarak (veya %@bir biçim dizesi kullanarak ) dizelere dönüştürülebileceğini unutmayın .
walkytalky

vay .. teşekkürler walkytalky! beni bir dokümantasyona yönlendirebilir veya onu anlamak için örnek bir kod verebilir misiniz? =)
dav3

Yanıtlar:


380

Deneyin:

NSString *myString = [NSNumber stringValue];

3
ancak dizinin içindeki NSNumber'ı almalı ve ardından StringValue yöntemini çağırmalısınız, NSString * myString = [[myArray objectAtIndex: i] stringValue]; ancak bu dizinde bir NSNumaranızın olduğundan emin olmalısınız
JonLOo

DescriptionWithLocale: [NSLocale currentLocale] 'i tercih ediyorum çünkü hem ints hem de float'lar için çalışıyor.
just.do.it

@JonLOo, bunu belirli bir sayı için kullanırken, ondalık değerler tam değerleri kaybediyor. Örneğin: NSNumber * num = [NSNumber numberWithDouble: 48.3]; NSString * strNumber = num.stringValue; 48.299999 şeklinde sonuç verir; Bu, Miktarı ve gerçek dünyada uğraşması ve büyük sayılarla çarpılması gerekiyorsa kritik hale gelir. !! Herhangi bir düşünce?
Vish

merhaba @Vish, bu çözümü denemedim, bu yüzden işe %f[NSString stringWithFormat:@"%f", yourDouble];
yarayıp

"'StringValue' seçicisi için bilinen bir sınıf yöntemi yok" <- stringValue bir sınıf işlevi olmadığından, onu NSNumber üzerinde doğrudan çağıramazsınız. rhalgravez'in cevabı bunu doğru yapıyor.
user1021430

13

Bunu şununla yapabilirsiniz:

NSNumber *myNumber = @15;
NSString *myNumberInString = [myNumber stringValue];

7
//An example of implementation :
// we set the score of one player to a value
[Game getCurrent].scorePlayer1 = [NSNumber numberWithInteger:1];
// We copy the value in a NSNumber
NSNumber *aNumber = [Game getCurrent].scorePlayer1;
// Conversion of the NSNumber aNumber to a String with stringValue
NSString *StringScorePlayer1 = [aNumber stringValue];

5

veya Dene NSString *string = [NSString stringWithFormat:@"%d", [NSNumber intValue], nil];


8
Bu iki dönüşüm yapar. Biri NSNumber'ı intValue'ye dönüştürmek ve diğeri de ortaya çıkan intValue'yu NSString'e zorlamak için. Bunu kullanmak bazıları için küçük olabilir, ancak kaldırmak küçük hesaplama döngülerini kurtarmak için harika bir yoldur ... bu da eklenebilir.
Jann

Bu, depolanan numaraların tam sayılar olduğunu varsayar. Ya saklanan numara türünü bilmiyorsanız?
James Webster

3

Komik olan, NSNumber'ın bir dizenin parçası olursa otomatik olarak dizeye dönüşmesidir. Belgelendiğini sanmıyorum. Bunları dene:

NSLog(@"My integer NSNumber:%@",[NSNumber numberWithInt:184]);
NSLog(@"My float NSNumber:%@",[NSNumber numberWithFloat:12.23f]);
NSLog(@"My bool(YES) NSNumber:%@",[NSNumber numberWithBool:YES]);
NSLog(@"My bool(NO) NSNumber:%@",[NSNumber numberWithBool:NO]);

NSString *myStringWithNumbers = [NSString stringWithFormat:@"Int:%@, Float:%@ Bool:%@",[NSNumber numberWithInt:132],[NSNumber numberWithFloat:-4.823f],[NSNumber numberWithBool:YES]];
NSLog(@"%@",myStringWithNumbers);

Yazdırılacak:

My integer NSNumber:184
My float NSNumber:12.23
My bool(YES) NSNumber:1
My bool(NO) NSNumber:0
Int:132, Float:-4.823 Bool:1

Hem Mac hem de iOS'ta çalışır

Bu çalışmıyor:

NSString *myNSNumber2 = [NSNumber numberWithFloat:-34512.23f];

2
Bu belgelenmiştir: %@format belirleyicisi -descriptionmesajı ilgili alıcı nesnesine gönderecektir . Bunu yazılı aynı ruhu içinde son satırı uygulayabiliriz: NSString *myNSNumber2 = [[NSNumber numberWithFloat:-34512.23f] description];. Bildiğim kadarıyla söyleyebilirim, NSNumber's descriptionve stringValueyöntemleri aynı şeyi yapın.
Jean-Denis Muys

2

Swift'de bunu yapabilirsin

let number : NSNumber = 95
let str : String = number.stringValue

2

Swift 3.0'da

let number:NSNumber = 25
let strValue = String(describing: number as NSNumber)
print("As String => \(strValue)")

String'deki sayı değerini alabiliriz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.