2010-10-19 88 views
115

所以我有一个NSArray“myArray”与NSNumber s和NSString s。我需要他们在另一个UIView,所以我是这样的:如何将NSNumber转换为NSString

- (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? (我实际上需要他们作为字符串...) 我会转换NSStringNSNumber这样: NSString *blah = [NSNumber intValue]。但我不知道如何把它架在上面的代码...

+0

您的数组似乎实际上包含字典,通过使用'objectForKey'来判断。因此,在尝试转换之前,您需要从中提取适当的值。请注意,大多数Cocoa对象类型(包括NSNumber)可以通过调用'description'方法(或在格式字符串中使用'%@')来转换为字符串。 – walkytalky 2010-10-19 16:04:52

+0

哇..谢谢你walkytalky!你能指点我一个文档还是给一个示例代码来理解它? =) – dav3 2010-10-19 16:26:21

+0

谢谢你,工作。 – dav3 2010-10-19 20:57:56

回答

341

尝试:

NSString *myString = [NSNumber stringValue]; 
+0

谢谢,但是,我有一个数组,并且不响应stringValue .. – dav3 2010-10-19 15:41:47

+3

,但你应该采取数组内的NSNumber,然后调用StringValue方法,就像NSString * myString = [[myArray objectAtIndex:i]字符串值];但你必须确定你有一个NSNumber在该索引 – JonLOo 2010-10-19 15:47:13

+0

我更喜欢descriptionWithLocale:[NSLocale currentLocale],因为它适用于整数和浮点数。 – 2015-04-11 17:22:03

5

,或者尝试NSString *string = [NSString stringWithFormat:@"%d", [NSNumber intValue], nil];

+7

这有两个转换。一个将NSNumber转换为intValue,另一个将生成的intValue强制转换为NSString。对某些人来说,使用它可能会很小,但将其删除是保存小型计算周期的好方法......可以加起来。 – Jann 2011-06-01 22:56:00

+0

这假定存储的数字是整数。如果你不知道存储号码的类型怎么办? – 2014-03-04 13:10:19

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]; 
11

你可以做到这一点:

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

有趣的是,如果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];'。据我所知,'NSNumber'的'description'和'stringValue'方法做同样的事情。 – 2016-03-22 08:08:34

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

我们可以得到的字符串的数值。