Як перетворюється NSInteger
на NSString
тип даних?
Я спробував наступне, де місяць NSInteger
:
NSString *inStr = [NSString stringWithFormat:@"%d", [month intValue]];
Як перетворюється NSInteger
на NSString
тип даних?
Я спробував наступне, де місяць NSInteger
:
NSString *inStr = [NSString stringWithFormat:@"%d", [month intValue]];
Відповіді:
NSIntegers не є об'єктами, на які ви їх кидаєте long
, щоб відповідати поточному визначенню 64-бітної архітектури:
NSString *inStr = [NSString stringWithFormat: @"%ld", (long)month];
[@(integerValue) stringValue]
є більш чистим підходом.
Шлях Obj-C =):
NSString *inStr = [@(month) stringValue];
У NSInteger
методі є метод, stringValue
який можна використовувати навіть з літералом
NSString *integerAsString1 = [@12 stringValue];
NSInteger number = 13;
NSString *integerAsString2 = [@(number) stringValue];
Дуже просто. Чи не так?
var integerAsString = String(integer)
%zd
працює для NSIntegers ( %tu
для NSUInteger), не маючи уваги і не попереджуючи як для 32-розрядної, так і для 64-розрядної архітектури. Я поняття не маю, чому це не " рекомендований спосіб ".
NSString *string = [NSString stringWithFormat:@"%zd", month];
Якщо вас цікавить, чому це працює, дивіться це питання .
Простий спосіб зробити:
NSInteger value = x;
NSString *string = [@(value) stringValue];
Тут @(value)
новонавернені дане NSInteger
на NSNumber
об'єкт , для якого ви можете викликати необхідну функцію, stringValue
.
Під час компіляції з підтримкою arm64
це не призведе до попередження:
[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];
Ви також можете спробувати:
NSInteger month = 1;
NSString *inStr = [NSString stringWithFormat: @"%ld", month];
Format specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *')
. Натомість, згідно з документами Apple , я пішовNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];