ฉันจะแปลง NSInteger เป็น NSString datatype ได้อย่างไร


138

หนึ่งแปลงNSIntegerเป็นNSStringประเภทข้อมูลได้อย่างไร

ฉันลองทำสิ่งต่อไปนี้โดยที่เดือนคือNSInteger:

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

คำตอบ:


269

NSIntegers ไม่ใช่อ็อบเจ็กต์ที่คุณส่งไปlongเพื่อให้ตรงกับนิยามสถาปัตยกรรม 64 บิตปัจจุบัน:

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


11
ฉันลองแล้ว แต่ก็ได้รับคำเตือนFormat specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *')เรื่อย ๆ ตามเอกสารของ Appleฉันไปด้วยNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
สตีเวน

8
โปรดทราบว่าในโปรเซสเซอร์ 64 บิตเช่นชิป A7 ใหม่หากแอปของคุณถูกคอมไพล์สำหรับ 64 บิต NSInteger จะยาวไม่ใช่ int การร่ายเดือน (int) จะเป็นการทำลายบนแพลตฟอร์ม 64 บิตสำหรับกรณีทั่วไป หากกำหนดเป้าหมายแพลตฟอร์มของ Apple โดยเฉพาะให้ใช้วิธี Objective-C เหมือนกับคำตอบของ Aleksey Kozhevnikov หรือสิ่งที่คล้ายกันซึ่งจะใช้ได้กับทั้ง int และ long - เช่น long ;-) ตัวอย่างแม้ว่าจะไม่ได้ลงนาม (หมายถึงไม่ใช่เชิงลบ) อยู่ใน Andreas คำตอบของเลย์
Louis St-Amour

1
@Steven ฉันได้พยายามลบคำตอบเพื่อให้มีคำตอบที่เป็นปัจจุบันมีความเกี่ยวข้องมากขึ้นปรากฏและได้รับการยอมรับ แต่เห็นได้ชัดว่าคำตอบที่ยอมรับนั้นไม่สามารถลบได้ อย่างน้อยฉันจึงพยายามปรับเนื้อหาเพื่อให้ข้อมูลที่เป็นประโยชน์มากที่สุดสำหรับผู้ที่กำลังมองหาวิธีแก้ปัญหาอย่างรวดเร็วที่ไม่เรียกคำเตือน
luvieere

เอกสารของ @luvieere Appleอธิบายอย่างชัดเจนถึงวิธีปฏิบัติกับ NSInteger ในรูปแบบสตริง คุณควรอัปเดตคำตอบของคุณเพื่อปฏิบัติตามคำแนะนำนี้
Nikolai Ruhe

2
[@(integerValue) stringValue]เป็นแนวทางที่สะอาดกว่า
Zorayr


76

Modern Objective-C

An NSIntegerมีวิธีการstringValueที่สามารถใช้ได้แม้กับตัวอักษร

NSString *integerAsString1 = [@12 stringValue];

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

ง่ายมาก. ไม่ใช่เหรอ?

รวดเร็ว

var integerAsString = String(integer)

8

%zdใช้งานได้กับ NSIntegers ( %tuสำหรับ NSUInteger) โดยไม่มีการแคสต์และไม่มีคำเตือนบนสถาปัตยกรรมทั้ง 32 บิตและ 64 บิต ฉันไม่รู้ว่าทำไมจึงไม่ใช่ " วิธีที่แนะนำ "

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

หากคุณสนใจว่าเหตุใดจึงได้ผลโปรดดูคำถามนี้


5

วิธีทำง่ายๆ:

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

ที่นี่@(value)จะแปลงสิ่งที่กำหนดNSIntegerให้เป็นNSNumberวัตถุที่คุณสามารถเรียกใช้ฟังก์ชันที่ต้องการstringValueได้


2

เมื่อรวบรวมโดยรองรับarm64สิ่งนี้จะไม่สร้างคำเตือน:

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


0

ได้รับคำตอบแล้ว แต่คิดว่าสำหรับบางสถานการณ์นี่จะเป็นวิธีที่น่าสนใจในการรับสตริงจาก NSInteger

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.