Swift Language
Logging in Swift
Suche…
Bemerkungen
println
und debugPrintln
wurden in Swift 2.0 entfernt.
Quellen:
https://developer.apple.com/library/content/technotes/tn2347/_index.html http://ericasadun.com/2015/05/22/swift-logging/
Debuggen von Drucken
Debug Print zeigt die Instanzdarstellung, die am besten zum Debuggen geeignet ist.
print("Hello")
debugPrint("Hello")
let dict = ["foo": 1, "bar": 2]
print(dict)
debugPrint(dict)
Erträge
>>> Hello
>>> "Hello"
>>> [foo: 1, bar: 2]
>>> ["foo": 1, "bar": 2]
Diese zusätzlichen Informationen können beispielsweise sehr wichtig sein:
let wordArray = ["foo", "bar", "food, bars"]
print(wordArray)
debugPrint(wordArray)
Erträge
>>> [foo, bar, food, bars]
>>> ["foo", "bar", "food, bars"]
Beachten Sie, dass in der ersten Ausgabe 4 Elemente im Gegensatz zu 3 im Array vorhanden sind. Aus Gründen wie diesem ist es beim Debuggen vorzuziehen, debugPrint
zu verwenden
Aktualisieren von Debug- und Druckwerten für Klassen
struct Foo: Printable, DebugPrintable {
var description: String {return "Clear description of the object"}
var debugDescription: String {return "Helpful message for debugging"}
}
var foo = Foo()
print(foo)
debugPrint(foo)
>>> Clear description of the object
>>> Helpful message for debugging
Dump
dump
druckt den Inhalt eines Objekts über Spiegelung (Spiegelung) aus.
Detailansicht eines Arrays:
let names = ["Joe", "Jane", "Jim", "Joyce"]
dump(names)
Drucke:
▿ 4 Elemente
- [0]: Joe
- [1]: Jane
- [2]: Jim
- [3]: Joyce
Für ein Wörterbuch:
let attributes = ["foo": 10, "bar": 33, "baz": 42]
dump(attributes)
Drucke:
▿ 3 Schlüssel / Wert-Paare
▿ [0]: (2 Elemente)
- .0: bar
- .1: 33
▿ [1]: (2 Elemente)
- .0: baz
- .1: 42
▿ [2]: (2 Elemente)
- .0: foo
- .1: 10
dump
wird als dump(_:name:indent:maxDepth:maxItems:)
deklariert dump(_:name:indent:maxDepth:maxItems:)
.
Der erste Parameter hat keine Bezeichnung.
Es stehen weitere Parameter zur Verfügung, beispielsweise name
, um eine Bezeichnung für das zu inspizierende Objekt festzulegen:
dump(attributes, name: "mirroring")
Drucke:
▿ Spiegelung: 3 Schlüssel / Wert-Paare
▿ [0]: (2 Elemente)
- .0: bar
- .1: 33
▿ [1]: (2 Elemente)
- .0: baz
- .1: 42
▿ [2]: (2 Elemente)
- .0: foo
- .1: 10
Sie können auch wählen, nur eine bestimmte Anzahl von Elementen mit maxItems:
zu maxItems:
das Objekt bis zu einer bestimmten Tiefe mit maxDepth:
zu analysieren und die Einrückung gedruckter Objekte mit indent:
zu ändern indent:
print () vs. dump ()
Viele von uns beginnen mit dem einfachen print()
debuggen. Nehmen wir an, wir haben eine solche Klasse:
class Abc {
let a = "aa"
let b = "bb"
}
und wir haben eine Instanz von Abc
als so:
let abc = Abc()
Wenn wir print()
für die Variable ausführen, erfolgt die Ausgabe
App.Abc
Während dump()
Ausgaben
App.Abc #0
- a: "aa"
- b: "bb"
Wie zu sehen ist, gibt dump()
die gesamte Klassenhierarchie aus, während print()
einfach den Klassennamen ausgibt.
Daher ist dump()
besonders für das Debugging der Benutzeroberfläche hilfreich
let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
Mit dump(view)
wir:
- <UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>> #0
- super: UIResponder
- NSObject
Während des print(view)
wir:
<UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>>
Es gibt mehr Informationen über die Klasse mit dump()
. Daher ist es beim Debuggen der Klasse selbst nützlicher.
print vs NSLog
In swift können wir sowohl print()
als auch NSLog()
verwenden, um etwas auf der Xcode-Konsole zu drucken.
Es gibt jedoch viele Unterschiede in den Funktionen print()
und NSLog()
, z.
1 TimeStamp: NSLog()
druckt den Zeitstempel zusammen mit dem String, den wir an ihn übergeben haben, aber print()
druckt den Zeitstempel nicht.
z.B
let array = [1, 2, 3, 4, 5]
print(array)
NSLog(array.description)
Ausgabe:
[1, 2, 3, 4, 5]
2017-05-31 13: 14: 38.582 ProjetName [2286: 7473287] [1, 2, 3, 4, 5]
Außerdem wird ProjectName zusammen mit dem Zeitstempel gedruckt.
2 Nur String: NSLog()
nimmt nur String als Eingabe an, print()
kann jedoch jede Art von Eingabe drucken, die an ihn übergeben wird.
z.B
let array = [1, 2, 3, 4, 5]
print(array) //prints [1, 2, 3, 4, 5]
NSLog(array) //error: Cannot convert value of type [Int] to expected argument type 'String'
3 Leistung: Die NSLog()
Funktion ist sehr langsam im Vergleich zur print()
Funktion.
4 Synchronisation: NSLog()
übernimmt die gleichzeitige Verwendung aus der Multithreading-Umgebung und druckt die Ausgabe, ohne sie zu überschneiden. print()
behandelt solche Fälle jedoch nicht und verwirrt die Ausgabe.
5 NSLog()
: NSLog()
Ausgänge auf der Gerätekonsole. Diese Ausgabe können Sie sehen, wenn Sie unser Gerät an Xcode anschließen. print()
druckt die Ausgabe nicht auf der Konsole des Geräts.