Swift: print() vs println() vs NSLog() — was wählen und warum ist das wichtig?
\n\nJeder, der anfängt, Swift zu lernen, stößt früher oder später auf die Ausgabe von Daten in der Konsole. Man könnte meinen, was könnte einfacher sein? Aber hier entsteht Verwirrung: print(), println() und NSLog() — worin besteht der Unterschied? Warum braucht man drei Methoden, wenn man auch eine behalten könnte? In diesem Artikel ordnen wir alles, zeigen es an Beispielen und helfen Ihnen, diese Funktionen nie wieder zu verwechseln.
Das Thema basiert auf einer echten, populären Frage auf Stack Overflow, die tausende Aufrufe gesammelt hat. Wir haben sie für Bildungsinhalte angepasst, damit Sie nicht nur auswendig lernen, sondern die Logik von Swift verstehen.
\n\n\n\n
Kurze Geschichte: Von Objective-C zum modernen Swift
\n\nUm den Unterschied zu verstehen, muss man ein wenig in die Geschichte eintauchen. Swift ist eine junge Sprache (erschienen 2014), wurde aber als Nachfolger von Objective-C entwickelt. Daher koexistieren in ihr sowohl „native“ Swift-Funktionen als auch alte, aus der Apple-Welt stammende, friedlich.
\n\n- \n
println()— ein Überbleibsel aus den allerersten Swift-Versionen (vor Version 2.0). Heute ist es vollständig entfernt. \n print()— der moderne Ersatz fürprintln(), erschienen in Swift 2.0. \n NSLog()— eine Funktion aus der Welt von Objective-C, die bis heute aktiv zum Debuggen verwendet wird. \n
Wenn Sie modernes Swift (Version 4.x und höher) schreiben, werden Sie println() nicht mehr antreffen — der Compiler gibt einfach einen Fehler aus. Aber in alten Tutorials und Foren taucht es immer noch auf, daher ist es wichtig zu verstehen, was es ist und wodurch es ersetzt wurde.
\n\n
print() — das Hauptwerkzeug für die Ausgabe
\n\nWie funktioniert print()?
\n\nAb Swift 2.0 wurde print() zur Standardmethode für die Datenausgabe in die Konsole. Es ist flexibel, einfach und vollständig kontrollierbar.
let name = "Anna"\nlet age = 25\n\nprint("Hallo, \\(name)! Du bist \\(age) Jahre alt.")\n// Ausgabe: Hallo, Anna! Du bist 25 Jahre alt.\n\nDer Hauptunterschied zum alten println() ist, dass print() nicht automatisch ein Zeilenumbruchzeichen hinzufügt. Genauer gesagt, fügt es eines hinzu, aber Sie können dies mit dem Parameter terminator steuern.
// Normale Ausgabe\nprint("Erste Zeile")\nprint("Zweite Zeile")\n// Ausgabe:\n// Erste Zeile\n// Zweite Zeile\n\n// Ausgabe ohne Zeilenumbruch\nprint("Erste Zeile", terminator: "")\nprint("Zweite Zeile", terminator: "")\n// Ausgabe: Erste ZeileZweite Zeile\n\nParameter von print()
\n\n- \n
items— das, was Sie ausgeben (es können mehrere Werte, durch Kommas getrennt, sein). \n separator— Trennzeichen zwischen den Elementen (standardmäßig ein Leerzeichen). \n terminator— was am Ende der Zeile gesetzt wird (standardmäßig\\n— Zeilenumbruch). \n
print(1, 2, 3, separator: "-", terminator: "!")\n// Ausgabe: 1-2-3!\n\nWann verwenden: für die normale Datenausgabe, Protokollierung in einfachen Anwendungen, Lernbeispiele.
\n\n\n\n
println() — ein Gast aus der Vergangenheit
\n\nWenn Sie println() in einem alten Code sehen, wissen Sie, dass es das Äquivalent zu print() aus den ersten Swift-Versionen ist. Der einzige Unterschied: println() hat immer ein Zeilenumbruchzeichen am Ende hinzugefügt und hatte keinen Parameter terminator.
// Alter Code in Swift 1.x\nlet x = 10\nprintln("Wert von x = \\(x)")\n// Ausgabe: Wert von x = 10 (mit Zeilenumbruch)\n\nIn modernen Swift-Versionen (ab 2.0) existiert println() nicht mehr. Wenn Sie versuchen, es zu verwenden, erhalten Sie einen Kompilierungsfehler. Ersetzen Sie es einfach durch print() — und alles wird funktionieren.