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.


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.


@ 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.


32
var language = "Swift" 
var resultStr = "\(language) is a new programming language"

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"

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.


10
let the_string = "Swift"
let resultString = "\(the_string) is a new Programming Language"

9

Très simple:

let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")

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")

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

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.


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)"

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

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"

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)

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


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!)

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.