2017-03-23 1 views
3

Vous ne savez pas si c'est possible. Mais je veux faire ceci:Swift: chaînes dynamiques avec injections variables locales

let version = "2.0.1" 
let year = 2017 
let version = "Build \(version), \(year)" 

Cependant, je veux rechercher la chaîne de version à partir d'un fichier localisé. c'est à dire.

let version = "2.0.1" 
let year = 2017 
let versionTemplate = NSLocalizedString("version.template", comment:"") 
let version = ???? // Something done with versionTemplate 

J'ai regardé en utilisant NSExpression, mais il est pas évident si elle peut le faire ou comment.

Quelqu'un fait cela?

+0

En relation: [Comment mettre en forme les chaînes localisées dans Swift?] (Http://stackoverflow.com/questions/35316655/how-to-format-localised-strings-in-swift). –

Répondre

4

tout à fait possible

Vous voulez utiliser un initialiseur de chaîne plutôt que littéraux.

let version = "2.0.1" 
let year = 2017 
let versionTemplate = String(format: NSLocalizedString("version.template", comment: ""), arguments: [version, year]) 
// output: Build 2.0.1, 2017 

Dans votre fichier localizable.strings vous devez avoir votre modèle comme celui-ci:

"version.template" = "Build %@, %ld" 

Vous pouvez utiliser une variété de spécificateurs ici. Consultez la documentation pour toutes les possibilités. https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1

+5

Mieux vaut utiliser "Build% @,% ld" 'ou il va planter :) –

+0

excellent point. Mise à jour –

+1

Merci les gars. C'est la façon Objective C. J'aurais dû dire que je sais déjà comment faire ça. Mais j'espérais trouver un moyen plus proche de la façon dont Swift procédait à l'interpolation. De la lecture, il semble que Swift utilise du sucre syntaxique pour le gérer plutôt que de fournir n'importe quelle sorte de fonction. Donc, je vais devoir aller à l'ancienne façon :-) J'ai aussi regardé dans String (stringWithInterpolation:) etc qui ressemble à ce que Swift fait réellement. – drekka