NSDictionary *dictionary = @{@"A" : @"alfa",
@"B" : @"bravo",
@"C" : @"charlie",
@"D" : @"delta",
@"E" : @"echo",
@"F" : @"foxtrot"};
NSLog(@"%@", dictionary.description);
druckt Folgendes auf der Konsole aus:
{
A = alfa;
B = bravo;
C = charlie;
D = delta;
E = echo;
F = foxtrot;
}
let dictionary: [String : String] = ["A" : "alfa",
"B" : "bravo",
"C" : "charlie",
"D" : "delta",
"E" : "echo",
"F" : "foxtrot"];
print(dictionary)
druckt Folgendes auf der Konsole aus:
["B": "bravo", "A": "alfa", "F": "foxtrot", "C": "charlie", "D": "delta", "E": "echo"]
Gibt es in Swift eine Möglichkeit, hübsche Druckwörterbücher zu erstellen, in denen jedes Schlüssel-Wert-Paar eine neue Zeile belegt?
dump
beispielsweise verwenden, wenn das Ziel darin besteht, das Wörterbuch zu überprüfen. stackoverflow.com/documentation/swift/3966/logging-in-swift/…print(dictionary as! NSDictionary)
billiger Trick?Antworten:
Sie können beispielsweise dump verwenden , wenn das Ziel darin besteht, das Wörterbuch zu überprüfen.
dump
ist Teil der Standardbibliothek von Swift.Verwendung:
Ausgabe:
dump
druckt den Inhalt eines Objekts durch Reflexion (Spiegelung).Detailansicht eines Arrays:
Drucke:
Für ein Wörterbuch:
Drucke:
dump
wird als deklariertdump(_:name:indent:maxDepth:maxItems:)
.Der erste Parameter hat keine Bezeichnung.
Es stehen andere Parameter zur Verfügung, z. B.
name
das Festlegen einer Beschriftung für das zu untersuchende Objekt:Drucke:
Sie können auch festlegen, dass nur eine bestimmte Anzahl von Elementen mit gedruckt werden soll
maxItems:
, dass das Objekt bis zu einer bestimmten Tiefe analysiert werdenmaxDepth:
soll und dass die Einrückung der gedruckten Objekte mit geändert werden sollindent:
.quelle
This is not pretty printed JSON
Niemand hat es gesagt. Das OP fragte nach hübschen Swift-Wörterbüchern - niemand spricht über JSON, außer ein paar nicht zum Thema gehörenden Antwortenden. Bei der OP-Frage geht es überhaupt nicht um JSON.po Lösung
Für diejenigen unter Ihnen, die Dictionary als JSON ohne Escape-Sequenz in der Konsole sehen möchten , ist hier eine einfache Möglichkeit, dies zu tun
(lldb)
p print(String(data: try! JSONSerialization.data(withJSONObject: object, options: .prettyPrinted), encoding: .utf8 )!)
quelle
Ein Wörterbuch in 'AnyObject' umzuwandeln war für mich die einfachste Lösung:
Dies ist für mich leichter zu lesen als die Dump-Option, aber beachten Sie, dass Sie nicht die Gesamtzahl der Schlüsselwerte erhalten.
quelle
Nur eine andere Möglichkeit, funktionale Programmierung zu verwenden
Ausgabe
quelle
[String: String]
Wörterbuch, ist jedoch nicht für[AnyHashable: Any]
Wörterbücher geeignet. Wenn ein Wert ein Wörterbuch ist, kehren Sie zu Swifts nicht hübschem Druck zurück.Nur zum Debuggen würde ich das Array oder Wörterbuch in einen hübschen gedruckten JSON konvertieren:
Dann:
Ergebnis auf der Konsole:
quelle
Ich würde nicht viele der hier gegebenen Antworten als wahrhaft gedrucktes JSON betrachten, da das Ergebnis ungültig ist, wenn Sie die Ergebnisse an einen JSON-Validator übergeben (häufig aufgrund des Codes, der '=' statt ':' enthält).
Der einfachste Weg, dies zu tun, besteht darin, das JSON-Objekt mithilfe der hübschen gedruckten Schreiboption in Daten zu konvertieren und dann eine Zeichenfolge mit den resultierenden Daten zu drucken.
Hier ist ein Beispiel:
Ergebnis:
BEARBEITEN : Es wurde darauf hingewiesen, dass das OP nicht nach JSON gefragt hat. Ich finde jedoch, dass die Antworten, die nur das Drucken oder Ablegen der Daten in die Konsole empfehlen, nur eine sehr geringe Formatierung (falls vorhanden) bieten und daher nicht besonders druckbar sind.
Ich glaube, obwohl das OP nicht nach JSON fragt, ist es eine brauchbare Antwort, da es ein viel besser lesbares Format für Daten ist als das schreckliche Format, das von xcode / swift in die Konsole ausgespuckt wird.
quelle
e let jsonData = try! JSONSerialization.data(withJSONObject: response, options: .prettyPrinted);if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) }
Sie können einfach eine for-Schleife verwenden und jede Iteration drucken
Antrag in Erweiterung:
Alternative Anwendung:
Verwendung:
Ausgabe (Getestet in Xcode 8 Beta 2 Playground):
quelle
description
unddebugDescription
bereits gibt, ist es möglicherweise besser, die Variable aufzurufenprettyDescription
und die formatierte Zeichenfolge zurückzugeben.Nehmen Sie für Swift 3 (und bauen Sie auf der brillanten Antwort von @Jalakoo auf ) die folgende
Dictionary
Erweiterung auf:Drucken Sie dann ein Wörterbuch einer beliebigen Hierarchie auf hübsche Weise (besser als
dump()
), indem Sie Folgendes verwenden:quelle
Die Methode zum Konvertieren des Swift Dictionary in json und zurück ist die beste. Ich benutze den Meißel von Facebook, der einen pjson- Befehl hat, um ein Swift-Wörterbuch zu drucken. Z.B:
Dies sollte das Wörterbuch hübsch drucken. Dies ist eine viel sauberere Methode, um das zu tun, was bereits vorgeschlagen wurde. PS Im Moment müssen Sie dikt als NSDictionary umwandeln, da die Objective-C-Laufzeit Swift-Wörterbücher nicht versteht. Ich habe bereits eine PR für Meißel erstellt, um diese Einschränkung zu beseitigen.
UPDATE: Meine PR wurde akzeptiert. Jetzt können Sie den Befehl psjson anstelle des oben genannten Befehls pjson verwenden .
quelle
Einzelheiten
Lösung
Verwendung
Ergebnisse
quelle
Swift 5, Xcode 10.3:
quelle
Hübscher Druck vom Datenobjekt:
quelle
Wie wäre es mit:
quelle
quelle
Geben Sie beim Debuggen die Struktur aus, die dem Codable Protocol für die Konsole entspricht, und
verwenden Sie das JSON-Format.
strcut konform CustomDebugStringConvertible
Debug-Druckstruktur
quelle