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/

http://www.dotnetperls.com/print-swift

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:

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.

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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow