Cách chuyển đổi NSNumber sang NSString


132

Vì vậy, tôi có một NSArray"myArray" với NSNumbers và NSStrings. Tôi cần chúng ở UIViewcái khác vì vậy tôi đi như thế này:

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

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

Các chủ đề hoạt động. Nhưng làm thế nào tôi có thể lấy NSNumbernó ra khỏi nó? (Tôi thực sự cần chúng dưới dạng chuỗi ...) Tôi sẽ chuyển đổi một NSStringtừ NSNumbernhư thế này : NSString *blah = [NSNumber intValue]. Nhưng tôi không biết làm thế nào để thiết lập nó trong đoạn mã trên ...


Mảng của bạn dường như thực sự chứa từ điển, đánh giá bằng cách sử dụng objectForKey. Vì vậy, bạn sẽ cần trích xuất các giá trị phù hợp từ đó trước khi thử chuyển đổi. Lưu ý rằng hầu hết các loại đối tượng Ca cao, bao gồm NSNumber, có thể được chuyển đổi thành chuỗi bằng cách gọi descriptionphương thức (hoặc sử dụng %@trong chuỗi định dạng).
walkytalky

wow .. cảm ơn bạn đi bộ! bạn có thể chỉ cho tôi một tài liệu hoặc đưa ra một mã ví dụ để hiểu nó không? =)
dav3

Câu trả lời:


380

Thử:

NSString *myString = [NSNumber stringValue];

3
nhưng bạn nên lấy NSNumber bên trong mảng và sau đó gọi phương thức StringValue, một cái gì đó như NSString * myString = [[myArray objectAtIndex: i] stringValue]; nhưng bạn phải chắc chắn rằng bạn có NSNumber tại chỉ mục đó
JonLOo

Tôi thích mô tảWithLocale: [NSLocale currentLocale] bởi vì nó hoạt động cho cả ints và float.
just.do.it

@JonLOo khi sử dụng số này cho số cụ thể các giá trị thập phân mất giá trị chính xác. Ví dụ: NSNumber * num = [NSNumber numberWithDouble: 48.3]; NSString * strNumber = num.opesValue; cho kết quả là 48.299999; điều này trở nên quan trọng nếu Số tiền của nó và phải xử lý trong thế giới thực và nhân với số lượng lớn. !! Bất cứ suy nghĩ nào?
Vish

xin chào @Vish, tôi chưa thử giải pháp này vì vậy tôi không chắc nó có hoạt động không, hãy thử định dạng nó %fnhư thế này: [NSString stringWithFormat:@"%f", yourDouble];
JonLOo

"Không có phương thức lớp nào được biết cho bộ chọn 'stringValue'" <- stringValue không phải là một hàm lớp nên bạn không thể gọi nó trực tiếp trên NSNumber. câu trả lời của rhalgravez làm điều đó một cách chính xác.
dùng1021430

13

Bạn có thể làm điều đó với:

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

hay là thử NSString *string = [NSString stringWithFormat:@"%d", [NSNumber intValue], nil];


8
Điều này không có hai chuyển đổi. Một để biến NSNumber thành intValue và một để ép intValue kết quả thành NSString. Sử dụng cái này có thể nhỏ đối với một số người, nhưng loại bỏ nó là một cách tuyệt vời để lưu các chu kỳ tính toán nhỏ ... có thể cộng lại.
Jann

Điều này giả định rằng các số được lưu trữ là ints. Nếu bạn không biết loại số được lưu trữ thì sao?
James Webster

3

Điều buồn cười là NSNumber tự động chuyển thành chuỗi nếu nó trở thành một phần của chuỗi. Tôi không nghĩ rằng nó được ghi lại. Thử những thứ này xem:

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

Nó sẽ in:

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

Hoạt động trên cả Mac và iOS

Cái này không hoạt động:

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

2
Đây là tài liệu: trình %@xác định định dạng sẽ gửi -descriptiontin nhắn đến đối tượng người nhận tương ứng. Bạn có thể làm cho dòng cuối cùng của bạn hoạt động theo tinh thần tương tự bằng cách viết : NSString *myNSNumber2 = [[NSNumber numberWithFloat:-34512.23f] description];. Theo như tôi có thể nói, NSNumbercác phương pháp descriptionstringValuephương pháp đều làm điều tương tự.
Jean-Denis Muys

2

Trong Swift bạn có thể làm như thế này

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

2

Trong Swift 3.0

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

Chúng ta có thể nhận được giá trị số trong Chuỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.