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.