Câu trả lời:
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 int
thành NSNumber
và chọn biểu diễn chuỗi với stringValue
phương thức:
NSString *strValue = [@(myInt) stringValue];
hoặc là
NSString *strValue = @(myInt).stringValue;
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
( NSNumber
có, không cần lo lắng ở đây). Hãy thử điều này ( description
sẽ in ngày, nhưng stringValue
sẽ bị lỗi):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
@(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.
!
) và bạn sẽ nhận ra rằng bạn đã làm sai trong Objective-C. Nếu đối tượng test
khô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.
(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)
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
@(myInt)
là một biểu thức đóng hộp , nó trả về một Số NSN.
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
.
NSString *strValue = @(myInt).stringValue;