Я хочу отформатировать строку в Swift с двумя потенциальными аргументами (используя спецификаторы формата ). Строка для форматирования может иметь место только для первого аргумента, только для второго аргумента или для обоих аргументов. Если я использую первый или оба аргумента, он работает, но если я использую только второй аргумент, он не работает. Например:
let title = "M."
let name = "David"
let greetingFormat = "Hello %1$@ %2$@"
print(String(format: greetingFormat, title, name))
// OUTPUT> Hello M. David
// OK
Если я использую только первый аргумент в строке для форматирования:
let greetingFormat = "Hello %1$@"
print(String(format: greetingFormat, title, name))
// OUTPUT> Hello M.
// OK
Но при использовании только второго аргумента
let greetingFormat = "Hello %2$@"
print(String(format: greetingFormat, title, name))
// OUTPUT> Hello M.
// NOT THE EXPECTED RESULT!
В последнем случае я ожидал «Привет, Дэвид». Это ошибка? Как я могу получить ожидаемый результат для последнего случая, когда используется только второй аргумент?
Примечания:
- Обратите внимание, что эта проблема возникает в контексте локализации (т.е. строка для форматирования поступает из файла Localizable.strings), поэтому у меня нет возможности напрямую удалить неиспользуемый аргумент.
- Вопрос не относится к форматированию имени человека. Это просто для примера.