it-swarm.com.de

Swift - Zeichenfolge über mehrere Zeilen aufteilen

Wie kann ich einen String über mehrere Zeilen aufteilen, z. B. unten?

var text:String = "This is some text
                   over multiple lines"
216

Swift 4 bietet Unterstützung für mehrzeilige String-Literale . Neben Zeilenumbrüchen können sie auch nicht vergebene Zitate enthalten.

var text = """
    This is some text
    over multiple lines
    """

In älteren Versionen von Swift ist es nicht möglich, ein einzelnes Literal über mehrere Zeilen hinweg zu verwenden. Sie können jedoch Literale über mehrere Zeilen hinweg hinzufügen:

var text = "This is some text\n"
         + "over multiple lines\n"
374
Connor

Ich habe eine Erweiterung für String verwendet, um mehrzeilige Zeichenfolgen zu erzielen, während der Compiler-Fehler vermieden wird. Außerdem können Sie ein Trennzeichen angeben, sodass Sie es ähnlich wie die Python-Join-Funktion verwenden können

extension String {
    init(sep:String, _ lines:String...){
        self = ""
        for (idx, item) in lines.enumerated() {
            self += "\(item)"
            if idx < lines.count-1 {
                self += sep
            }
        }
    }

    init(_ lines:String...){
        self = ""
        for (idx, item) in lines.enumerated() {
            self += "\(item)"
            if idx < lines.count-1 {
                self += "\n"
            }
        }
    }
}



print(
    String(
        "Hello",
        "World!"
    )
)
"Hello
World!"

print(
    String(sep:", ",
        "Hello",
        "World!"
    )
)
"Hello, World!"
30
mcornell

Dies war das erste Enttäuschende an Swift, das mir auffiel. In fast allen Skriptsprachen sind mehrzeilige Zeichenfolgen möglich.

C++ 11 fügte rohe String-Literale hinzu, mit denen Sie Ihren eigenen Terminator definieren können

C # hat seine @Literals für mehrzeilige Zeichenketten.

Sogar einfaches C und somit altmodisches C++ und Objective-C ermöglichen die Konkatenzierung, indem mehrere Literale nebeneinander gesetzt werden, sodass die Anführungszeichen zusammenfallen. Whitespace zählt nicht, wenn Sie das tun, also können Sie sie in andere Zeilen schreiben (müssen jedoch Ihre eigenen Zeilenumbrüche hinzufügen):

const char* text = "This is some text\n"
                   "over multiple lines";

Da Swift nicht weiß, dass Sie Ihren Text über mehrere Zeilen gesetzt haben, muss ich das Muster von connor korrigieren, ähnlich wie mein C-Sample.

var text:String = "This is some text \n" +
                  "over multiple lines"
26
Andy Dent

Wie Litso darauf hinweist, kann die wiederholte Verwendung des +- Operators in einem Ausdruck dazu führen, dass XCode Beta hängt (nur mit XCode 6 Beta 5 überprüft): Xcode 6 Beta nicht kompiliert

Eine Alternative für mehrzeilige Zeichenfolgen besteht jetzt darin, ein Array von Zeichenfolgen und reduce mit + zu verwenden:

var text = ["This is some text ",
            "over multiple lines"].reduce("", +)

Oder einfach einfacher mit join:

var text = "".join(["This is some text ",
                    "over multiple lines"])
15
Jonas Reinsch

Ab Swift 4.0 sind mehrzeilige Zeichenfolgen möglich, es gibt jedoch einige Regeln:

  1. Sie müssen Ihre Zeichenfolgen mit drei Anführungszeichen (""") beginnen und beenden.
  2. Ihr String-Inhalt sollte in einer eigenen Zeile beginnen.
  3. Der abschließende """ sollte auch in einer eigenen Zeile beginnen.

Ansonsten bist du gut zu gehen! Hier ist ein Beispiel:

let longString = """
When you write a string that spans multiple
lines make sure you start its content on a
line all of its own, and end it with three
quotes also on a line of their own.
Multi-line strings also let you write "quote marks"
freely inside your strings, which is great!
"""

Weitere Informationen finden Sie unter Neuigkeiten in Swift 4 .

14
TwoStraws

Swift 4 hat dieses Problem durch die Unterstützung von mehrzeiligen Zeichenfolgen gelöst. Um das Zeichenfolgenliteral zu beginnen, fügen Sie drei Anführungszeichen ("" ") ein und drücken Sie die Eingabetaste. Nach dem Drücken der Rücktaste beginnen Sie mit dem Schreiben von Zeichenfolgen mit beliebigen Variablen, Zeilenumbrüchen und Anführungszeichen wie Sie in Notepad oder einem anderen Texteditor schreiben würden. Um das mehrzeilige String-Literal wieder zu beenden, schreiben Sie in eine neue Zeile.

Siehe unteres Beispiel

     let multiLineStringLiteral = """
    This is one of the best feature add in Swift 4
    It let’s you write “Double Quotes” without any escaping
    and new lines without need of “\n”
    """

print(multiLineStringLiteral)
8
Nareshkumar Nil

Swift:

@connor ist die richtige Antwort, aber wenn Sie Zeilen in eine print-Anweisung einfügen möchten, ist \n und/oder \r, diese heißen Escape Sequences oder Escaped Characters, Dies ist ein Link zu Apple Dokumentation zum Thema. .

Beispiel:

print("First line\nSecond Line\rThirdLine...")
5
Juan Boero

Zusätzlich zur @Connor-Antwort muss\n auch\n vorhanden sein. Hier ist überarbeiteter Code:

var text:String = "This is some text \n" +
                  "over multiple lines"
4

Das folgende Beispiel zeigt eine mehrzeilige Fortsetzung mit Klammern als einfache Problemumgehung für den Swift-Fehler ab Xcode 6.2 Beta. Hier wird der Ausdruck als zu komplex bezeichnet, um ihn in einer angemessenen Zeitspanne auflösen zu können und in Betracht zu ziehen, ihn in kleiner zu zerlegen Stücke:

    .
    .
    .
    return String(format:"\n" +
                    ("    part1:    %d\n"    +
                     "    part2:    %d\n"    +
                     "    part3:  \"%@\"\n"  +
                     "    part4:  \"%@\"\n"  +
                     "    part5:  \"%@\"\n"  +
                     "    part6:  \"%@\"\n") +
                    ("    part7:  \"%@\"\n"  +
                     "    part8:  \"%@\"\n"  +
                     "    part9:  \"%@\"\n"  +
                     "    part10: \"%@\"\n"  +
                     "    part12: \"%@\"\n") +
                     "    part13:  %f\n"     +
                     "    part14:  %f\n\n",
                    part1, part2, part3, part4, part5, part6, part7, part8, 
                    part9, part10, part11, part12, part13, part14)
    .
    .
    .
3
clearlight

Sie können Unicode Equals für Eingabe oder \n verwenden und sie in Ihrer Zeichenfolge implementieren. Zum Beispiel: \u{0085}.

0
hooman

Hier ist ein Code-Snippet, um eine Zeichenfolge durch n Zeilen zu trennen, die über Zeilen getrennt sind:

//: A UIKit based Playground for presenting user interface

import UIKit
import PlaygroundSupport

class MyViewController : UIViewController {
    override func loadView() {

        let str = String(charsPerLine: 5, "Hello World!")
        print(str) // "Hello\n Worl\nd!\n"

    }
}

extension String {

    init(charsPerLine:Int, _ str:String){

        self = ""
        var idx = 0
        for char in str {
            self += "\(char)"
            idx = idx + 1
            if idx == charsPerLine {
                self += "\n"
                idx = 0
            }
        }

    }
}
0
Michael N

Ein Ansatz besteht darin, den Beschriftungstext auf attributedText festzulegen und die String-Variable zu aktualisieren, um den HTML-Code für den Zeilenumbruch (<br />) einzuschließen.

Zum Beispiel:

var text:String = "This is some text<br />over multiple lines"
label.attributedText = text

Ausgabe:

This is some text
over multiple lines

Hoffe das hilft!

0
B-Rad

Probe

var yourString = "first line \n second line \n third line"

In diesem Fall finden Sie den Operator + nicht geeignet

0
Danielle Cohen

Eine andere Möglichkeit, wenn Sie eine String-Variable mit vordefiniertem Text verwenden möchten,

var textFieldData:String = "John"
myTextField.text = NSString(format: "Hello User, \n %@",textFieldData) as String
myTextField.numberOfLines = 0
0
Zoran777