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.


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.


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


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

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"

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.


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

9

Sehr einfach:

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

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

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

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.


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

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

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"

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)

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


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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.