Comment concaténer des chaînes dans Swift?

188

Comment concaténer une chaîne dans Swift?

En Objective-Cnous aimons

NSString *string = @"Swift";
NSString *resultStr = [string stringByAppendingString:@" is a new Programming Language"];

ou

NSString *resultStr=[NSString stringWithFormat:@"%@ is a new Programming Language",string];

Mais je veux faire cela en langage Swift.

Rajneesh071
la source
1
Le compilateur Swift ne peut pas compiler + très bien. Si vous avez quelques + dans une phrase, cela peut échouer. Use ()
kelalaka

Réponses:

335

Vous pouvez concaténer des chaînes de plusieurs manières:

let a = "Hello"
let b = "World"

let first = a + ", " + b
let second = "\(a), \(b)"

Vous pouvez également faire:

var c = "Hello"
c += ", World"

Je suis sûr qu'il existe également d'autres moyens.

Un peu de description

letcrée une constante. (un peu comme un NSString). Vous ne pouvez pas modifier sa valeur une fois que vous l'avez définie. Vous pouvez toujours l'ajouter à d'autres choses et créer de nouvelles variables.

varcrée une variable. (un peu comme NSMutableString) afin que vous puissiez en changer la valeur. Mais cela a été répondu à plusieurs reprises sur Stack Overflow, (voir la différence entre let et var ).

Remarque

En réalité letet varsont très différents de NSStringet NSMutableStringmais cela aide l'analogie.

Fogmeister
la source
@ Rajneesh071 Pourquoi donnerait-il une erreur de compilation?
Fogmeister
letcrée une constante. (un peu comme une NSString). Vous ne pouvez pas modifier sa valeur une fois que vous l'avez définie. Vous pouvez toujours l'ajouter à d'autres choses et créer de nouvelles variables. varcréer une variable. (un peu comme NSMutableString) afin que vous puissiez en changer la valeur. Mais cela a été répondu à plusieurs reprises sur SO. Recherchedifference between let and var
Fogmeister
let a = "Hello" let b = "World" let first = a + "," + b Ne fonctionne pas, c'est ce qui fonctionne, let first = "(a), (b)". Vous obtiendrez une erreur d'exécution avec la première méthode
Joseph
1
@Joseph fonctionne bien pour moi. i.imgur.com/T15s4Sp.png Merci pour le vote négatif .
Fogmeister
@Fogmeister quelle version de xCode utilisez-vous? Ne fonctionne pas sur xCode 6.3 Beta, peut-être que cela fonctionne sur la dernière version
Joseph
62

Vous pouvez ajouter une chaîne de ces manières:

  • str += ""
  • str = str + ""
  • str = str + str2
  • str = "" + ""
  • str = "\(variable)"
  • str = str + "\(variable)"

Je pense que je les ai tous nommés.

Arbitur
la source
32
var language = "Swift" 
var resultStr = "\(language) is a new programming language"
yoeriboven
la source
25
En remarque, cela s'appelle une interpolation de chaîne, pas une concaténation.
dcastro
13

Cela fonctionnera aussi:

var string = "swift"
var resultStr = string + " is a new Programming Language"
CW0007007
la source
11

\ ceci est utilisé pour ajouter une chaîne à une autre chaîne.

var first = "Hi" 
var combineStr = "\(first) Start develop app for swift"

Vous pouvez également essayer ceci: - + mot-clé.

 var first = "Hi" 
 var combineStr = "+(first) Start develop app for swift"

Essayez ce code.

Jitendra
la source
10
let the_string = "Swift"
let resultString = "\(the_string) is a new Programming Language"
Bagvendt
la source
9

Très simple:

let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")
Rajesh Loganathan
la source
OUlet ResultString = "\(StringA)\(StringB)"
Aks
Si vous utilisez l'interpolation, le + n'est pas nécessaire, comme Aks l'a mentionné. Si vous préférez utiliser le +, supprimez l'interpolation.
Raghu Teja
9

Vous pouvez maintenant utiliser stringByAppendingString dans Swift.

var string = "Swift"
var resultString = string.stringByAppendingString(" is new Programming Language")
Mark Moeykens
la source
5

Xcode n'a pas accepté les chaînes facultatives ajoutées avec une chaîne normale. J'ai écrit ces extensions pour résoudre ce problème:

extension String {
    mutating func addString(str: String) {
        self = self + str
    }
}

Ensuite, vous pouvez l'appeler comme:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1.addString(str2)
println(str1) //hi my name is

Cependant, vous pouvez maintenant faire quelque chose comme ceci:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1! += str2
Esqarrouth
la source
Quelle partie? Connaissez-vous les extensions?
Esqarrouth le
Oui, je me demandais ce qu'il y avait à gagner en convertissant '+' en 'addString ()'. Si je me souviens bien, cette façon vous donnerait également un avertissement au lieu d'une erreur de compilation si elle est utilisée sur une variable non mutable. Sinon, cela obscurcit ce qui se passe et, OMI, rien n'est plus facile / plus rapide à lire que «+». La vérité est qu'il pourrait y avoir une raison pour laquelle je suis aveugle et c'est pourquoi je demandais pourquoi cette méthode est `` recommandée ''
user3802077
Je l'ai utilisé lorsque xcode n'a pas accepté d'ajouter une chaîne facultative avec une chaîne normale. il ne le fait toujours pas directement mais maintenant cela fonctionne lorsque vous forcez le déroulement de la chaîne, donc cette extension est inutile atm. Je vais le supprimer après avoir lu ceci m'a laissé un commentaire
Esqarrouth
Merci pour l'explantion :). Je ne sais pas ce qui est considéré comme le meilleur, mais en ajoutant le contexte à votre réponse, cela aurait une valeur même difficile actuellement, cela peut ne pas être aussi utile qu'avant.
user3802077
4

Cela s'appelle l'interpolation de chaîne. C'est une façon de créer une NOUVELLE chaîne avec CONSTANTS, VARIABLE, LITERALS et EXPRESSIONS. pour des exemples:

      let price = 3
      let staringValue = "The price of \(price) mangoes is equal to \(price*price) "

aussi

let string1 = "anil"
let string2 = "gupta"
let fullName = string1 + string2  // fullName is equal to "anilgupta"
or 
let fullName = "\(string1)\(string2)" // fullName is equal to "anilgupta"

cela signifie également que les valeurs de chaîne de concaténation.

J'espère que cela vous aide.

Anil Gupta
la source
3

Pour imprimer la chaîne combinée en utilisant

Println("\(string1)\(string2)")

ou String3 stocke la sortie de la combinaison de 2 chaînes

let strin3 = "\(string1)\(string2)"
Pvni
la source
3

On peut également utiliser stringByAppendingFormat dans Swift.

var finalString : NSString = NSString(string: "Hello")
finalString = finalString.stringByAppendingFormat("%@", " World")
print(finalString) //Output:- Hello World
finalString = finalString.stringByAppendingFormat("%@", " Of People")
print(finalString) //Output:- Hello World Of People
Pushpa Y
la source
2

Swift 4.2

Vous pouvez également utiliser une extension:

extension Array where Element == String? {
    func compactConcate(separator: String) -> String {
        return self.compactMap { $0 }.filter { !$0.isEmpty }.joined(separator: separator)
    }
}

Utilisation:

label.text = [m.firstName, m.lastName].compactConcate(separator: " ")

Résultat:

"The Man"
"The"
"Man"
Nik Kov
la source
2

De: Matt Neuburg Book "iOS 13 Programming Fundamentals with Swift." :

Pour combiner (concaténer) deux chaînes, l' approche la plus simple consiste à utiliser l' opérateur + :

let s = "hello"
let s2 = " world"
let greeting = s + s2

Cette notation pratique est possible car l' opérateur + est surchargé: il fait une chose lorsque les opérandes sont des nombres (addition numérique) et une autre lorsque les opérandes sont des chaînes (concaténation). L' opérateur + est livré avec un raccourci d' affectation + = ; naturellement, la variable sur le côté gauche doit avoir été déclarée avec var:

var s = "hello"
let s2 = " world"
s += s2

Comme alternative à + = , vous pouvez appeler la méthode d'instance append (_ :) :

var s = "hello"
let s2 = " world"
s.append(s2)

Une autre façon de concaténer des chaînes est d' utiliser la méthode join (separator :) . Vous commencez par un tableau de chaînes à concaténer et lui donnez la chaîne à insérer entre toutes:

let s = "hello"
let s2 = "world"
let space = " "
let greeting = [s,s2].joined(separator:space)
Progr HS
la source
1

Vous pouvez utiliser SwiftString ( https://github.com/amayne/SwiftString ) pour ce faire.

"".join(["string1", "string2", "string3"]) // "string1string2string"
" ".join(["hello", "world"]) // "hello world"

DISCLAIMER: j'ai écrit cette extension

eurobrew
la source
1

Je viens de passer d'Objective-C à Swift (4), et je trouve que j'utilise souvent:

let allWords = String(format:"%@ %@ %@",message.body!, message.subject!, message.senderName!)
Sjakelien
la source
0

Dans Swift 5, Apple a introduit Raw Strings en utilisant les symboles #.

Exemple:

print(#"My name is "XXX" and I'm "28"."#)
let name = "XXX"
print(#"My name is \#(name)."#)

le symbole # est nécessaire après \. Un \ (nom) normal sera interprété comme des caractères dans la chaîne.

Yogendra Singh
la source
0

Swift 5

Vous pouvez y parvenir en utilisant l' appendingAPI. Cela renvoie une nouvelle chaîne créée en ajoutant une chaîne donnée au récepteur.

Détails de l'API: ici

Utilisez :

var text = "Hello"
text = text.appending(" Namaste")

Résultat :

Hello
Hello Namaste
Vittal Pai
la source