Swift: использование% s в String (формат:...)

Я хотел бы отформатировать строку с другой строкой, как это:

var str = "Hello, playground"
print (String(format: "greetings %s", str))

Это приводит к этому прекрасному результату:

привет 哰 ૧

Я попытался с% @, и это работает, но, поскольку я получаю строку формата с другого языка программирования, я хотел бы, если возможно, использовать тег% s. Есть ли способ?

Ответ 1

Хорошо, я заменил% s на% @. Python - мой друг.

Спасибо!

Ответ 2

Решение 1: изменение формата

Если формат из надежного внешнего источника, вы можете преобразовать его для замены вхождений %s на %@:

Итак, вместо:

String(format: "greetings %s", str)

Ты сделаешь:

String(format: "greetings %s".replacingOccurrences(of: "%s", with: "%@"), str)

Решение 2: изменение строки

Если формат сложный, простая замена не будет работать. Например:

  • при использовании спецификатора с числовой последовательностью символов: %1$s
  • при использовании символа "%", за которым следует "s": %%s
  • при использовании модификатора ширины: %-10s

В подобных случаях нам нужно придерживаться строки C.

Так что вместо:

String(format: "greetings %s", str)

Ты сделаешь:

str.withCString {
    String(format: "greetings %s", $0)
}