NSNumber를 NSString으로 변환하는 방법


132

그래서 s와 s를 NSArray가진 "myArray"가 있습니다. 나는 다른 사람들이 필요 하므로 다음과 같이하십시오.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가 작동합니다. 그러나 어떻게 NSNumber그것을 제거 할 수 있습니까? (실제로 문자열로 필요합니다 ...) NSString다음 NSNumber과 같이 변환합니다 NSString *blah = [NSNumber intValue]. 그러나 위 코드에서 설정하는 방법을 모르겠습니다 ...


배열에 실제로을 사용하여 판단하는 사전이 포함되어있는 것 같습니다 objectForKey. 따라서 변환을 시도하기 전에 적절한 값을 추출해야합니다. NSNumber를 포함한 대부분의 Cocoa 객체 유형은 description메소드 를 호출 하거나 %@형식 문자열에서 사용하여 문자열로 변환 할 수 있습니다 .
walkytalky

와우 .. 워키 토키 감사합니다! 문서를 알려주거나 이해할 수있는 예제 코드를 제공해 주시겠습니까? =)
dav3

답변:


380

시험:

NSString *myString = [NSNumber stringValue];

3
그러나 배열 안에있는 NSNumber를 가져 와서 NSString과 같은 StringValue 메소드를 호출해야합니다. * myString = [[myArray objectAtIndex : i] stringValue]; 하지만 그 지수에 NSNumber가 있는지 확인해야합니다
JonLOo

descriptionWithLocale : [NSLocale currentLocale]은 int와 float 모두에 대해 작동하기 때문에 선호합니다.
just.do.it

@JonLOo 특정 숫자에 이것을 사용할 때 10 진수 값은 정확한 값을 잃습니다. 예 : NSNumber * num = [NSNumber numberWithDouble : 48.3]; NSString * strNumber = num.stringValue; 48.299999로 결과를 제공합니다. 이것은 그 양이 실제 세계에서 다루어야하고 큰 숫자를 곱한 경우 중요합니다. !! 어떤 생각?
Vish

안녕하세요 @Vish, 나는이 솔루션을 시도하지 않았으므로 작동하는지 확실하지 않다면 다음 %f과 같이 포맷하십시오 . [NSString stringWithFormat:@"%f", yourDouble];
JonLOo

"선택기 'stringValue'에 대해 알려진 클래스 메소드가 없습니다."<-stringValue는 클래스 함수가 ​​아니므로 NSNumber에서 직접 호출 할 수 없습니다. rhalgravez의 답변이 올바르게 수행됩니다.
user1021430

13

당신은 그것을 할 수 있습니다 :

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

또는 시도 NSString *string = [NSString stringWithFormat:@"%d", [NSNumber intValue], nil];


8
이것은 두 가지 변환을 수행합니다. 하나는 NSNumber를 intValue로 바꾸고 다른 하나는 결과적인 intValue를 NSString으로 강제 변환합니다. 이것을 사용하는 것은 다소 작을 수 있지만 제거하는 것은 작은 계산주기를 절약하는 좋은 방법입니다 ...
Jann

이것은 저장되는 숫자가 정수라고 가정합니다. 저장된 숫자 유형을 모르면 어떻게합니까?
James Webster

3

재미있는 점은 NSNumber가 문자열의 일부가되면 자동으로 문자열로 변환한다는 것입니다. 나는 그것이 문서화되지 않았다고 생각합니다. 이것들을보십시오 :

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);

인쇄됩니다 :

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

Mac과 iOS 모두에서 작동

이것은 작동하지 않습니다 :

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

2
이 문서화되어 다음 %@형식 지정자는 보내드립니다 -description해당 수신기 객체에 메시지를. 다음과 같이 작성하여 마지막 행을 동일한 정신으로 작동시킬 수 있습니다 NSString *myNSNumber2 = [[NSNumber numberWithFloat:-34512.23f] description];. 지금까지 내가 말할 수있는 NSNumberdescriptionstringValue방법은 같은 일을한다.
Jean-Denis Muys

2

스위프트에서는 다음과 같이 할 수 있습니다

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

2

스위프트 3.0

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

문자열에서 숫자 값을 얻을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.