#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. Вероятно, это поможет… проверю это, когда вернусь домой 🙂 Спасибо.