Sök…


Anmärkningar

println och debugPrintln var tas bort i Swift 2.0.

källor:

https://developer.apple.com/library/content/technotes/tn2347/_index.html http://ericasadun.com/2015/05/22/swift-logging/

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

Debug Print

Debug Print visar den instansrepresentation som är bäst lämpad för felsökning.

print("Hello")
debugPrint("Hello")

let dict = ["foo": 1, "bar": 2]

print(dict)
debugPrint(dict)

utbyten

>>> Hello
>>> "Hello"
>>> [foo: 1, bar: 2]
>>> ["foo": 1, "bar": 2]

Denna extra information kan vara mycket viktig, till exempel:

let wordArray = ["foo", "bar", "food, bars"]

print(wordArray)
debugPrint(wordArray)

utbyten

>>> [foo, bar, food, bars]
>>> ["foo", "bar", "food, bars"]

Lägg märke till hur i den första utgången det verkar som om det finns fyra element i matrisen i motsats till 3. Av skäl som detta är det att föredra att vid felsökning använda debugPrint

Uppdatering av klasser felsöker och skriver ut värden

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

dumpa

dump skriver ut innehållet i ett objekt via reflektion (spegling).

Detaljerad vy över en matris:

let names = ["Joe", "Jane", "Jim", "Joyce"]
dump(names)

Grafik:

▿ 4 element
- [0]: Joe
- [1]: Jane
- [2]: Jim
- [3]: Joyce

För en ordlista:

let attributes = ["foo": 10, "bar": 33, "baz": 42]
dump(attributes)

Grafik:

▿ 3 nyckel- / värdepar
▿ [0]: (2 element)
- .0: bar
- .1: 33
▿ [1]: (2 element)
- .0: baz
- .1: 42
▿ [2]: (2 element)
- .0: foo
- .1: 10

dump deklareras som dump(_:name:indent:maxDepth:maxItems:) .

Den första parametern har ingen etikett.

Det finns andra parametrar tillgängliga, som name att ställa in en etikett för objektet som ska inspekteras:

dump(attributes, name: "mirroring")

Grafik:

▿ spegling: 3 nyckel- / värdepar
▿ [0]: (2 element)
- .0: bar
- .1: 33
▿ [1]: (2 element)
- .0: baz
- .1: 42
▿ [2]: (2 element)
- .0: foo
- .1: 10

Du kan också välja att bara skriva ut ett visst antal objekt med maxItems: att para objektet upp till ett visst djup med maxDepth: och att ändra indraget för tryckta objekt med indent:

Många av oss börjar felsöka med enkelt print() . Låt oss säga att vi har en sådan klass:

class Abc {
    let a = "aa"
    let b = "bb"
}

och vi har en förekomst av Abc som så:

let abc = Abc()

När vi kör print() på variabeln är utskriften

App.Abc

medan dump() utgångar

App.Abc #0
- a: "aa"
- b: "bb"

Som sett matar dump() ut hela klasshierarkin, medan print() matar ut klassnamnet.

Därför är dump() särskilt användbart för UI-felsökning

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

Med dump(view) vi:

 - <UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>> #0
    - super: UIResponder
      - NSObject 

När vi print(view) vi:

<UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>>

Det finns mer information om klassen med dump() , så det är mer användbart vid felsökning av klassen själv.

tryck vs NSLog

I snabb kan vi använda både print() och NSLog() funktioner för att skriva ut något på Xcode-konsolen.

Men det finns många skillnader i print() och NSLog() -funktioner, till exempel:

1 TimeStamp: NSLog() kommer att skriva ut tidsstämpel tillsammans med strängen vi skickade till den, men print() kommer inte att skriva ut tidsstämpel.
t.ex

let array = [1, 2, 3, 4, 5]
print(array)
NSLog(array.description)

Produktion:

[1, 2, 3, 4, 5]
2017-05-31 13: 14: 38.582 ProjetName [2286: 7473287] [1, 2, 3, 4, 5]

Det kommer också att skriva ut ProjectName tillsammans med tidsstämpel.

2 Only String: NSLog() tar bara String som en ingång, men print() kan skriva ut alla typer av inmatningar som skickas till den.
t.ex

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 Performance: NSLog() funktion är mycket långsam jämfört med print() funktion.

4 Synkronisering: NSLog() hanterar samtidig användning från miljö med flera gängor och skriver ut utan att överlappa den. Men print() kommer inte att hantera sådana fall och virvlar när du praterar utdata.

5 NSLog() : NSLog() -utgångar på enhetskonsolen, vi kan se denna utgång genom att ansluta vår enhet till Xcode. print() skriver inte ut på enhetens konsol.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow