web-dev-qa-db-fra.com

swift: utilisation de% s dans String (format: ...)

Je voudrais formater une chaîne avec une autre chaîne comme celle-ci:

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

Cela conduit à ce beau résultat:

salutations 哰 ૧

J'ai essayé avec% @ et cela fonctionne mais, comme je reçois une chaîne de formatage à partir d'un autre langage de programmation, je voudrais, si possible, utiliser la balise% s. Y a-t-il un moyen de le faire?

15
Julien

Solution 1: changer le format

Si le format provient d'une source externe fiable, vous pouvez le convertir pour remplacer les occurrences de %s avec %@:

Donc, au lieu de:

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

Tu fais:

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

Solution 2: changer la chaîne

Si le format est complexe , un simple remplacement ne fonctionnera pas. Par exemple:

  • lors de l'utilisation d'un spécificateur avec une séquence de caractères numériques: %1$s
  • lors de l'utilisation du caractère '%' suivi d'un 's': %%s
  • lors de l'utilisation d'un modificateur de largeur: %-10s

Dans des cas similaires, nous devons nous en tenir à une chaîne C.

Donc au lieu de:

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

Tu fais:

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