Comment concaténer une chaîne dans Swift?
Dans Objective-C
nous aimons
NSString *string = @"Swift";
NSString *resultStr = [string stringByAppendingString:@" is new Programming Language"];
ou
NSString *resultStr=[NSString stringWithFormat:@"%@ is new Programming Language",string];
Mais je veux le faire en langage Swift.
Vous pouvez concaténer des chaînes de plusieurs façons:
let a = "Hello"
let b = "World"
let first = a + ", " + b
let second = "\(a), \(b)"
Vous pouvez aussi faire:
var c = "Hello"
c += ", World"
Je suis sûr qu'il y a plus de moyens aussi.
Bit de description
let
crée une constante. (un peu comme un NSString
). Vous ne pouvez pas changer sa valeur une fois que vous l'avez définie. Vous pouvez toujours l'ajouter à d'autres choses et créer de nouvelles variables.
var
crée une variable. (un peu comme NSMutableString
) afin que vous puissiez en changer la valeur. Mais cela a été répondu plusieurs fois à Stack Overflow, (voir différence entre let et var).
Remarque
En réalité, let
et var
sont très différents de NSString
et NSMutableString
, mais cela aide l'analogie.
var language = "Swift"
var resultStr = "\(language) is new Programming Language"
Cela fonctionnera aussi:
var string = "Swift"
var resultStr = string + " is a new Programming Language"
\ this est utilisé pour ajouter une chaîne à une autre chaîne.
var first = "Hi"
var combineStr = "\(first) Start develop app for Swift"
Vous pouvez aussi essayer ceci: - + mot-clé.
var first = "Hi"
var combineStr = "+(first) Start develop app for Swift"
Essayez ce code.
let the_string = "Swift"
let resultString = "\(the_string) is a new Programming Language"
Très simple:
let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")
Vous pouvez maintenant utiliser stringByAppendingString dans Swift.
var string = "Swift"
var resultString = string.stringByAppendingString(" is new Programming Language")
XCode n'accepte pas les chaînes facultatives ajoutées avec une chaîne normale. J'ai écrit cette extension pour résoudre ce problème:
extension String {
mutating func addString(str: String) {
self = self + str
}
}
Ensuite, vous pouvez l'appeler comme suit:
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
C'est ce qu'on appelle l'interpolation de chaîne . C'est un moyen 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) "
également
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 concaténer des valeurs de chaîne.
J'espère que cela vous aide.
On peut aussi 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
Pour imprimer la chaîne combinée à l'aide de
Println("\(string1)\(string2)")
ou String3 stocke la sortie de la combinaison de 2 chaînes
let strin3 = "\(string1)\(string2)"
Vous pouvez utiliser SwiftString ( https://github.com/amayne/SwiftString ) pour le faire.
"".join(["string1", "string2", "string3"]) // "string1string2string"
" ".join(["hello", "world"]) // "hello world"
AVERTISSEMENT: j'ai écrit cette extension
Je viens de passer d'Objective-C à Swift (4), et je constate que j'utilise souvent:
let allWords = String(format:"%@ %@ %@",message.body!, message.subject!, message.senderName!)
Dans Swift 5 Apple a introduit les chaînes brutes utilisant des 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.
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"