NSString stringWithFormat: со случайным количеством замен

#cocoa #nsstring

#cocoa #nsstring

Вопрос:

Я читаю список строк, каждая из которых может содержать некоторое количество заполнителей (%@). Я хотел бы использовать stringWithFormat: для вставки соответствующего значения, но это работает только для одной замены. Что я могу использовать для замены всех значений? Существует ли какая-либо функция подстановки строк?

Это пример того, что я пытаюсь сделать (немного псевдокода):

 NSString[] patterns = { "my name is %@ every day", "my name is %@ and it will remain %@" };
foreach (NSString s in patterns )
{
    // sometimes the string has one substitution, and sometimes
    // more. The project where I am doing this throws a BAD_ACCESS
    // error if more than one substitution is required so need
    // to take a different approach?
    print [NSString stringWithFormat:s, "Jack"];
}
  

Комментарии:

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

2. 1 к черной лягушке. У вас есть значения в массиве или словаре или что?

3. Я добавил пример, чтобы проиллюстрировать, что я пытаюсь сделать.

Ответ №1:

Вы можете указать stringWithFormat: использовать один и тот же аргумент повторно, указав позицию. Смотрите Спецификаторы формата строки. Пример:

 [NSString stringWithFormat:@"%1$@ is the first argument, and so is %1$@",@"this"];
// creates "this is the first argument, and so is this"
  

Вы также могли бы использовать stringByReplacingOccurrencesOfString:withString: для замены всех экземпляров «% @», но для этого требуется, чтобы вы выполняли каждый аргумент отдельно, и они должны быть строками:

 [@"%@ is the first argument, and so is %@" stringByReplacingOccurrencesOfString:@"%@" withString:@"this"];
  

Комментарии:

1. Вероятно, это поможет… проверю это, когда вернусь домой 🙂 Спасибо.