Làm thế nào để chuyển đổi int sang NSString?


101

Tôi muốn chuyển đổi một intthành một NSStringtrong Mục tiêu C.

Tôi có thể làm cái này như thế nào?

Câu trả lời:


147

Nguyên thủy có thể được chuyển đổi thành các đối tượng có @()biểu thức. Vì vậy, cách ngắn nhất là biến đổi intthành NSNumbervà chọn biểu diễn chuỗi với stringValuephương thức:

NSString *strValue = [@(myInt) stringValue];

hoặc là

NSString *strValue = @(myInt).stringValue;

12
Ít dài dòng hơn một chút:NSString *strValue = @(myInt).stringValue;
Distortum

@DielsonSales một số đối tượng không có stringValue, nhưng tất cả đều có description- vì vậy, tốt hơn là bạn nên làm quen với việc sử dụng description( NSNumbercó, không cần lo lắng ở đây). Hãy thử điều này ( descriptionsẽ in ngày, nhưng stringValuesẽ bị lỗi):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
Islam Q.

1
@IslamQ. @(myInt)là một biểu thức đóng hộp cho [NSNumber numberWithInt:]và nó sẽ luôn trả về một Số NSN khi được cung cấp một số nguyên. [NSNumber stringValue]sẽ luôn trả về một NSString. Trong mã nhận xét của bạn, ép buộc (id)và gán cho một kiểu khác là một sai lầm lập trình rõ ràng: bạn không bao giờ nên làm điều đó. Nó giống như việc xoay xở một phương pháp và sau đó đưa ra tranh luận về việc phương pháp đó không hoạt động như những gì nó ban đầu.
Cœur

1
@IslamQ. Hãy thử chuyển đổi nhận xét của bạn sang Swift mà không sử dụng toán tử sự cố ( !) và bạn sẽ nhận ra rằng bạn đã làm sai trong Objective-C. Nếu đối tượng testkhông phải do bạn tạo ra, thì đó không phải là trách nhiệm của bạn. Bạn có thể cố gắng gọi isKindOfClass:tất cả các tham số đã nhận của mình, nhưng thậm chí điều đó có thể bị đánh lừa (ví dụ: bằng cách chuyển một cấu trúc thay vì một NSObject). Vì vậy, đừng làm điều đó: chỉ ghi lại một cách rõ ràng các loại dự kiến.
Cœur

@ Thưa ngài, tất nhiên việc truyền một đối tượng tới (id)là một sai lầm, đó chỉ là để demo điểm mà IMO descriptionđược ưa thích hơn stringValue(có thể tôi đã nhầm, đã không được lập trình trong ObjC trong nhiều năm)
Islam Q.

144
NSString *string = [NSString stringWithFormat:@"%d", theinteger];

@Elist khi bạn biết kiểu nguyên thủy, tôi tự hỏi liệu có thể có ít chi phí hơn một chút bằng cách tránh Số NSN trung gian khỏi mã của bạn không? @(myInt)là một biểu thức đóng hộp , nó trả về một Số NSN.
Cœur

37
int i = 25;
NSString *myString = [NSString stringWithFormat:@"%d",i];

Đây là một trong nhiều cách.


2

Nếu chuỗi này là để trình bày cho người dùng cuối, bạn nên sử dụng NSNumberFormatter. Điều này sẽ thêm hàng nghìn dấu phân cách và sẽ tôn trọng cài đặt bản địa hóa cho người dùng:

NSInteger n = 10000;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *string = [formatter stringFromNumber:@(n)];

Ví dụ: ở Mỹ, điều đó sẽ tạo ra một chuỗi 10,000, nhưng ở Đức, điều đó sẽ là 10.000.

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.