Chciałbym przekonwertować an int
na a NSString
w celu C.
W jaki sposób mogę to zrobić?
Odpowiedzi:
Prymitywy można przekształcić w obiekty z @()
wyrażeniem. Więc najkrótsza droga jest przekształcenie int
się NSNumber
i odebrać reprezentację ciąg z stringValue
metodą:
NSString *strValue = [@(myInt) stringValue];
lub
NSString *strValue = @(myInt).stringValue;
stringValue
, ale wszystkie mają description
- więc jako dobrą praktykę lepiej przyzwyczaić się do używania description
( NSNumber
nie ma, nie musisz się tutaj martwić). Spróbuj tego ( description
wydrukuje datę, ale stringValue
ulegnie awarii):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
@(myInt)
jest wyrażeniem w ramce dla [NSNumber numberWithInt:]
i zawsze zwróci NSNumber, gdy otrzyma int. [NSNumber stringValue]
zawsze zwróci NSString. W kodzie twojego komentarza wymuszenie rzutowania (id)
i przypisywania do innego typu jest oczywistym błędem programistycznym: nigdy nie powinieneś tego robić. To tak, jakby zmieniać metodę, a następnie argumentować, że metoda nie robi tego, co pierwotnie robiła.
!
), a zorientujesz się, że robiłeś to źle w Objective-C. Jeśli obiekt test
nie został stworzony przez Ciebie, nie jesteś za to odpowiedzialny. Możesz próbować wywołać isKindOfClass:
wszystkie otrzymane parametry, ale nawet to można oszukać (na przykład przekazując strukturę zamiast obiektu NSObject). Więc nie rób tego: po prostu udokumentuj wyraźnie oczekiwane typy.
(id)
jest błędem, tylko po to, aby pokazać, że IMO description
jest preferowane stringValue
(mogę się mylić, nie programowałem w ObjC od lat)
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
@(myInt)
jest wyrażeniem w ramce , zwraca NSNumber.
Jeśli ten ciąg jest przeznaczony do prezentacji użytkownikowi końcowemu, należy użyć NSNumberFormatter
. Spowoduje to dodanie tysięcy separatorów i uszanuje ustawienia lokalizacji użytkownika:
NSInteger n = 10000;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *string = [formatter stringFromNumber:@(n)];
Na przykład w USA utworzyłoby to ciąg 10,000
, ale w Niemczech tak 10.000
.
NSString *strValue = @(myInt).stringValue;