Is there a way to pretty print Swift dictionaries to the console?
po
solution
For those of you want to see Dictionary as JSON without escape sequence in console, here is a simple way to do that:
(lldb) p print(String(data: try! JSONSerialization.data(withJSONObject: object, options: .prettyPrinted), encoding: .utf8)!)
Update
Check out this answer too.
You could use dump, for example, if the goal is to inspect the dictionary. dump
is part of Swift's standard library.
Usage:
let dictionary: [String : String] = ["A" : "alfa",
"B" : "bravo",
"C" : "charlie",
"D" : "delta",
"E" : "echo",
"F" : "foxtrot"]
dump(dictionary)
Output:
dump
prints the contents of an object via reflection (mirroring).
Detailed view of an array:
let names = ["Joe", "Jane", "Jim", "Joyce"]
dump(names)
Prints:
▿ 4 elements
- [0]: Joe
- [1]: Jane
- [2]: Jim
- [3]: Joyce
For a dictionary:
let attributes = ["foo": 10, "bar": 33, "baz": 42]
dump(attributes)
Prints:
▿ 3 key/value pairs
▿ [0]: (2 elements)
- .0: bar
- .1: 33
▿ [1]: (2 elements)
- .0: baz
- .1: 42
▿ [2]: (2 elements)
- .0: foo
- .1: 10
dump
is declared as dump(_:name:indent:maxDepth:maxItems:)
.
The first parameter has no label.
There's other parameters available, like name
to set a label for the object being inspected:
dump(attributes, name: "mirroring")
Prints:
▿ mirroring: 3 key/value pairs
▿ [0]: (2 elements)
- .0: bar
- .1: 33
▿ [1]: (2 elements)
- .0: baz
- .1: 42
▿ [2]: (2 elements)
- .0: foo
- .1: 10
You can also choose to print only a certain number of items with maxItems:
, to parse the object up to a certain depth with maxDepth:
, and to change the indentation of printed objects with indent:
.
Casting a dictionary to 'AnyObject' was the simplest solution for me:
let dictionary = ["a":"b",
"c":"d",
"e":"f"]
print("This is the console output: \(dictionary as AnyObject)")
This is easier to read for me than the dump option, but note it won't give you the total number of key-values.