Как отформатировать строки описания для атрибутов в Steam Web API?

Когда я использую эту ссылку, чтобы получить схему предмета для TF2, (http://api.steampowered.com/IEconItems_440/GetSchema/v0001/?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&language=en), под свойством атрибутов находится список всех атрибутов в игре для TF2.

Например, это один из таких атрибутов:

{
            "name": "gesture speed increase",
            "defindex": 201,
            "attribute_class": "mult_gesture_time",
            "description_string": "+%s1% faster taunt speed on wearer",
            "description_format": "value_is_percentage",
            "effect_type": "positive",
            "hidden": false,
            "stored_as_integer": false
},

Под свойством "description_string" вы можете видеть, что строка использует спецификатор формата, но как реализовать это в xcode. %s1 в xcode не является правильным спецификатором формата для строк, так как мне его изменить?

EDIT: то, что я пытаюсь сделать, в основном использует [NSString stringWithFormat:@"+%s1% faster taunt speed on wearer", @"25"]. Проблема в том, что когда я NSLog это утверждение, номер не отображается, а вместо этого появляются какие-то странные символы. Я хочу, чтобы у меня было выражение «+25% быстрее скорость насмешек на носителе», так как мне этого добиться?


person Vishwa Iyer    schedule 07.06.2014    source источник


Ответы (1)


Я думаю, что ваш лучший подход - отказаться от stringWithFormat:, иначе вам придется экранировать такие символы, как %.

Вы можете сделать одно из следующих действий:

Единичное вхождение %s1
Если вам гарантировано, что %s1 будет встречаться только один раз в description_string, вы можете просто использовать:

NSString *description = @"+%s1% faster taunt speed on wearer";
description = [description stringByReplacingOccurrencesOfString:@"%s1" withString:@"25"];

Неоднократное появление %s1

NSString *description = @"+%s1% faster taunt speed on wearer and +%s1 XP";
NSArray *values = @[@"25", @"1000"];
NSRange range = NSMakeRange(0, description.length);
NSUInteger index = 0;
while (range.location != NSNotFound) {
    range = [description rangeOfString:@"%s1" options:0 range:range];
    if (range.location != NSNotFound) {
        NSString *value = values[index];
        description = [description stringByReplacingCharactersInRange:range withString:value];
        range = NSMakeRange(range.location + value.length, description.length - (range.location + value.length));
    }
    index++;
}
person mbogh    schedule 07.06.2014
comment
Спасибо, это действительно помогло! Я попробую и дам некоторые отзывы. - person Vishwa Iyer; 08.06.2014