Wie verkette ich Strings in Swift?

188

Wie verkette ich einen String in Swift?

In Objective-Cmögen wir

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

oder

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

Aber ich möchte das in Swift-Sprache machen.

Rajneesh071
quelle
1
Der Swift-Compiler kann + nicht sehr gut kompilieren. Wenn Sie ein paar + in einem Satz haben, kann dies fehlschlagen. Verwenden Sie ()
Kelalaka

Antworten:

335

Sie können Zeichenfolgen auf verschiedene Arten verketten:

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

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

Sie könnten auch tun:

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

Ich bin sicher, es gibt noch mehr Möglichkeiten.

Ein bisschen Beschreibung

letschafft eine Konstante. (irgendwie wie ein NSString). Sie können den Wert nicht mehr ändern, nachdem Sie ihn festgelegt haben. Sie können es dennoch zu anderen Dingen hinzufügen und neue Variablen erstellen.

varerstellt eine Variable. (so ähnlich NSMutableString), damit Sie den Wert ändern können. Dies wurde jedoch mehrmals beim Stapelüberlauf beantwortet (siehe Unterschied zwischen let und var ).

Hinweis

In Wirklichkeit letund varsind sehr verschieden von NSStringund NSMutableStringaber es hilft der Analogie.

Fogmeister
quelle
@ Rajneesh071 Warum sollte es einen Fehler bei der Kompilierung geben?
Fogmeister
letschafft eine Konstante. (Art wie ein NSString). Sie können den Wert nicht mehr ändern, nachdem Sie ihn festgelegt haben. Sie können es dennoch zu anderen Dingen hinzufügen und neue Variablen erstellen. varErstellen Sie eine Variable. (ähnlich wie NSMutableString), damit Sie den Wert ändern können. Dies wurde jedoch mehrmals auf SO beantwortet. difference between let and var
Sucht
let a = "Hallo" let b = "Welt" let first = a + "," + b Funktioniert nicht, das funktioniert, let first = "(a), (b)". Sie erhalten einen Laufzeitfehler mit der ersten Methode
Joseph
1
@ Joseph funktioniert gut für mich. i.imgur.com/T15s4Sp.png Vielen Dank für die Abwertung .
Fogmeister
@Fogmeister Welche Version von xCode verwenden Sie? Funktioniert nicht mit xCode 6.3 Beta, möglicherweise mit der neuesten Version
Joseph
62

Sie können eine Zeichenfolge folgendermaßen hinzufügen:

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

Ich glaube, ich habe sie alle benannt.

Arbitur
quelle
31
var language = "Swift" 
var resultStr = "\(language) is a new programming language"
Yoeriboven
quelle
25
Als Randnotiz wird dies als String-Interpolation und nicht als Verkettung bezeichnet.
Dcastro
13

Das wird auch funktionieren:

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

\ Dies wird verwendet, um eine Zeichenfolge an eine andere Zeichenfolge anzuhängen.

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

Sie können dies auch versuchen: - + Schlüsselwort.

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

Versuchen Sie diesen Code.

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

Sehr einfach:

let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")
Rajesh Loganathan
quelle
ODERlet ResultString = "\(StringA)\(StringB)"
fragt
Bei Verwendung der Interpolation wird das + nicht benötigt, wie Aks erwähnt hat. Wenn Sie das + bevorzugen, entfernen Sie die Interpolation.
Raghu Teja
9

Sie können jetzt stringByAppendingString in Swift verwenden.

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

Xcode akzeptierte keine optionalen Zeichenfolgen, die mit einer normalen Zeichenfolge hinzugefügt wurden. Ich habe diese Erweiterungen geschrieben, um dieses Problem zu lösen:

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

Dann können Sie es so nennen:

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

Sie können jetzt aber auch so etwas machen:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1! += str2
Esqarrouth
quelle
Welcher Teil? Kennen Sie Erweiterungen?
Esqarrouth
Ja, ich habe mich gefragt, was durch die Konvertierung von '+' in 'addString ()' erreicht wird. Wenn ich mich richtig erinnere, würde dieser Weg Ihnen auch eine Warnung anstelle eines Compilerfehlers geben, wenn er für eine nicht veränderbare Variable verwendet wird. Ansonsten verschleiert es, was los ist, und IMO ist nichts einfacher / schneller zu lesen als '+'. Die Wahrheit ist, dass es einen Grund geben könnte, für den ich blind bin, und deshalb habe ich gefragt, warum dieser Weg "empfohlen" wird
user3802077
Ich habe dies verwendet, als xcode das Hinzufügen einer optionalen Zeichenfolge mit einer normalen Zeichenfolge nicht akzeptierte. Das funktioniert immer noch nicht direkt, aber jetzt funktioniert es, wenn Sie das Entpacken der Zeichenfolge erzwingen. Diese Erweiterung ist also nutzlos. Ich werde es löschen, nachdem Sie dies gelesen haben, hat mir einen Kommentar
hinterlassen
Danke für die Erklärung :). Ich bin mir nicht sicher, was als besser angesehen wird, aber wenn Sie den Kontext zu Ihrer Antwort hinzufügen, hat er einen Wert, der derzeit noch schwierig ist. Möglicherweise ist er nicht so nützlich wie zuvor.
user3802077
4

Es wird als String-Interpolation bezeichnet. Auf diese Weise können Sie NEUE Zeichenfolgen mit CONSTANTS, VARIABLE, LITERALS und EXPRESSIONS erstellen. zum Beispiel:

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

ebenfalls

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"

Dies bedeutet auch, dass Zeichenfolgenwerte verkettet werden.

Hoffe das hilft dir.

Anil Gupta
quelle
3

So drucken Sie die kombinierte Zeichenfolge mit

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

oder String3 speichert die Ausgabe einer Kombination von 2 Strings

let strin3 = "\(string1)\(string2)"
Pvni
quelle
3

Man kann stringByAppendingFormat auch in Swift verwenden.

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.
quelle
2

Swift 4.2

Sie können auch eine Erweiterung verwenden:

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

Verwenden:

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

Ergebnis:

"The Man"
"The"
"Man"
Nik Kov
quelle
2

Aus: Matt Neuburg Buch „Grundlagen der iOS 13-Programmierung mit Swift“. ::

Um zwei Zeichenfolgen zu kombinieren (zu verketten) , verwenden Sie am einfachsten den Operator + :

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

Diese bequeme Notation ist möglich, weil der Operator + überladen ist: Er macht eine Sache, wenn die Operanden Zahlen sind (numerische Addition) und eine andere, wenn die Operanden Zeichenfolgen sind (Verkettung). Der Operator + wird mit einer Zuweisungsverknüpfung + = geliefert. Natürlich muss die Variable auf der linken Seite mit var deklariert worden sein:

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

Als Alternative zu + = , können Sie den Anruf append (_ :) Instanz - Methode:

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

Eine andere Möglichkeit, Zeichenfolgen zu verketten, ist die Methode join (separator :) . Sie beginnen mit einem Array von zu verkettenden Zeichenfolgen und übergeben ihm die Zeichenfolge, die zwischen allen eingefügt werden soll:

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

Sie können dazu SwiftString ( https://github.com/amayne/SwiftString ) verwenden.

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

HAFTUNGSAUSSCHLUSS: Ich habe diese Erweiterung geschrieben

Eurobrew
quelle
1

Ich habe gerade von Objective-C zu Swift (4) gewechselt und finde, dass ich oft benutze:

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

In Swift 5 hat Apple Raw Strings mit # Symbolen eingeführt.

Beispiel:

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

Das Symbol # ist nach \ erforderlich. Ein reguläres \ (Name) wird als Zeichen in der Zeichenfolge interpretiert.

Yogendra Singh
quelle
0

Swift 5

Sie können es mit appendingAPI erreichen. Dies gibt eine neue Zeichenfolge zurück, die durch Anhängen einer bestimmten Zeichenfolge an den Empfänger erstellt wurde.

API-Details: hier

Verwendung :

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

Ergebnis :

Hello
Hello Namaste
Vittal Pai
quelle