Làm cách nào để chuyển đổi NSInteger sang kiểu dữ liệu NSString?


137

Làm thế nào để một người chuyển đổi NSIntegersang NSStringkiểu dữ liệu?

Tôi đã thử như sau, trong đó tháng là một NSInteger:

  NSString *inStr = [NSString stringWithFormat:@"%d", [month intValue]];

Câu trả lời:


267

NSIntegers không phải là đối tượng, bạn sử dụng chúng longđể phù hợp với định nghĩa của kiến ​​trúc 64 bit hiện tại:

NSString *inStr = [NSString stringWithFormat: @"%ld", (long)month];


11
Tôi đã thử điều này, nhưng tôi tiếp tục nhận được một cảnh báo Format specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *'). Thay vào đó theo tài liệu của Apple , tôi đã đi cùngNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
Steven

8
Lưu ý rằng trên các bộ xử lý 64 bit, chẳng hạn như chip A7 mới, nếu ứng dụng của bạn được biên dịch cho 64 bit, NSInteger thực sự là một bản dài chứ không phải int. Thực hiện cast, tháng (int) sẽ bị phá hủy trên nền tảng 64 bit cho trường hợp chung. Nếu chỉ nhắm mục tiêu vào các nền tảng của Apple, hãy sử dụng cách Objective-C như trong câu trả lời của Aleksey Kozhevnikov hoặc một cái gì đó tương tự sẽ hoạt động với cả int và long - ví dụ: dài ;-) Một ví dụ, mặc dù không dấu (có nghĩa là không âm) Câu trả lời của Ley.
Louis St-Amour

1
@Steven Tôi đã cố gắng xóa câu trả lời để có câu trả lời hiện tại, phù hợp hơn, được chấp nhận, nhưng rõ ràng, câu trả lời được chấp nhận không thể bị xóa. Do đó, tôi đã cố gắng điều chỉnh ít nhất nội dung của nó để cung cấp nhiều thông tin hữu ích cho những người đang tìm kiếm một giải pháp nhanh chóng không kích hoạt cảnh báo.
luvieere

Tài liệu @luvieere của Apple giải thích rõ ràng cách xử lý NSInteger theo chuỗi định dạng. Bạn nên cập nhật câu trả lời của bạn để làm theo lời khuyên này.
Nikolai Ruhe

2
[@(integerValue) stringValue]là một cách tiếp cận sạch hơn.
Zorayr


75

Mục tiêu hiện đại-C

An NSIntegercó phương thức stringValuecó thể được sử dụng ngay cả với nghĩa đen

NSString *integerAsString1 = [@12 stringValue];

NSInteger number = 13;
NSString *integerAsString2 = [@(number) stringValue];

Rất đơn giản. Phải không?

Nhanh

var integerAsString = String(integer)

8

%zdhoạt động cho NSIntegers ( %tucho NSUInteger) không có phôi và không có cảnh báo trên cả kiến ​​trúc 32 bit và 64 bit. Tôi không biết tại sao đây không phải là " cách được đề xuất ".

NSString *string = [NSString stringWithFormat:@"%zd", month];

Nếu bạn quan tâm đến lý do tại sao công trình này nhìn thấy câu hỏi này .


5

Cách dễ dàng để làm:

NSInteger value = x;
NSString *string = [@(value) stringValue];

Ở đây, @(value)chuyển đổi cái đã cho NSIntegerthành một NSNumberđối tượng mà bạn có thể gọi hàm được yêu cầu , stringValue.


2

Khi biên dịch với sự hỗ trợ cho arm64, điều này sẽ không tạo ra một cảnh báo:

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];

1

Bạn cũng có thể thử:

NSInteger month = 1;
NSString *inStr = [NSString stringWithFormat: @"%ld", month];

0

Câu trả lời được đưa ra nhưng nghĩ rằng trong một số tình huống, đây cũng sẽ là cách thú vị để nhận chuỗi từ NSInteger

NSInteger value = 12;
NSString * string = [NSString stringWithFormat:@"%0.0f", (float)value];

0

NSNumber có thể tốt cho bạn trong trường hợp này.

NSString *inStr = [NSString stringWithFormat:@"%d", 
                    [NSNumber numberWithInteger:[month intValue]]];
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.