Как передать int в stringWithFormat?

Я пытаюсь использовать stringWithFormat для установки числового значения в текстовом свойстве метки, но следующий код не работает. Я не могу передать int в NSString. Я ожидал, что этот метод знает, как автоматически преобразовать int в NSString.

Что мне здесь нужно делать?

- (IBAction) increment: (id) sender
{
    int count = 1;
    label.text = [NSString stringWithFormat:@"%@", count];
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
68
0
131 805
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Ответ принят как подходящий

Сделай это:

label.text = [NSString stringWithFormat:@"%d", count];

Это вызывает предупреждение при компиляции для 64-битных устройств, где int фактически является long.

devios1 24.01.2015 02:14

Вы хотите использовать %d или %i для целых чисел. %@ используется для объектов.

Однако стоит отметить, что следующий код решает ту же задачу и намного понятнее.

label.intValue = count;

Имейте в виду, что @ "% d" будет работать только на 32-битной версии. Как только вы начнете использовать NSInteger для совместимости, если вы когда-либо компилируете для 64-битной платформы, вы должны использовать @ "% ld" в качестве спецификатора формата.

Использование %ld при компиляции для 32-битного устройства теперь выдает предупреждение. Какой путь безопаснее? Используете %ld с 32 битами или используете %d с 64?

devios1 24.01.2015 02:15

Неважно, я вижу примечание Сквеларта о кастинге на long в первую очередь. Это помогает и теперь компилируется для любой цели без предупреждения!

devios1 24.01.2015 02:20

А за комедийную ценность:

label.text = [NSString stringWithFormat:@"%@", [NSNumber numberWithInt:count]];

(Хотя это может быть полезно, если однажды вы имеете дело с NSNumber)

Или используйте современный синтаксис objective-c и используйте: [NSString stringWithFormat: @ "% @", @ (count)]

Daniel Witurna 28.10.2014 15:12

Марк Шарбонно писал:

Keep in mind that @"%d" will only work on 32 bit. Once you start using NSInteger for compatibility if you ever compile for a 64 bit platform, you should use @"%ld" as your format specifier.

Интересно, спасибо за подсказку, я использовал @ "% d" со своими NSInteger!

В документации SDK также рекомендуется преобразовать NSInteger в long в этом случае (чтобы соответствовать @ "% ld"), например:

NSInteger i = 42;
label.text = [NSString stringWithFormat:@"%ld", (long)i];

Источник: Руководство по программированию строк для какао - спецификаторы формата строки (требуется регистрация разработчика iPhone)

Размещенный вами фрагмент - всего лишь образец, демонстрирующий, что вы пытаетесь сделать?

Причина, по которой я спрашиваю, заключается в том, что вы назвали метод increment, но, похоже, вы используете его для установки значения текстовой метки, а не для увеличения значения.

Если вы пытаетесь сделать что-то более сложное, например, установить целочисленное значение и отобразить это значение в метке, вы можете рассмотреть возможность использования привязок. например

Вы объявляете свойство count, и ваше действие increment устанавливает для этого значения любое значение, а затем в IB вы привязываете текст метки к значению count. Пока вы следуете Key Value Coding (KVC) с count, вам не нужно писать какой-либо код для обновления отображения метки. А с точки зрения дизайна у вас более слабая связь.

Не забудьте для long long int:

long long int id = [obj.id longLongValue];
[NSString stringWithFormat:@"this is my id: %lld", id]
label.text = [NSString stringWithFormat:@"%d", XYZ]; 

//result:   label.text = XYZ
//use %d for int values

Чтобы быть 32-битным и 64-битным, используйте один из Выражения в рамке:

  label.text = [NSString stringWithFormat:@"%@", @(count).stringValue];
NSString * formattedname;
NSString * firstname;
NSString * middlename;
NSString * lastname;

firstname = @"My First Name";
middlename = @"My Middle Name";
lastname = @"My Last Name";

formattedname = [NSString stringWithFormat:@"My Full Name: %@ %@ %@", firstname, middlename, lastname];
NSLog(@"\n\nHere is the Formatted Name:\n%@\n\n", formattedname);

/*
Result:
Here is the Formatted Name:
My Full Name: My First Name My Middle Name My Last Name
*/

Другие вопросы по теме