Zoeken…


Opmerkingen

println en debugPrintln verwijderd in Swift 2.0.

bronnen:

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

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

Foutopsporing afdrukken

Foutopsporingsafdruk toont de exemplaarweergave die het meest geschikt is voor foutopsporing.

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

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

print(dict)
debugPrint(dict)

opbrengsten

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

Deze extra informatie kan erg belangrijk zijn, bijvoorbeeld:

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

print(wordArray)
debugPrint(wordArray)

opbrengsten

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

Merk op dat het in de eerste uitvoer lijkt dat er 4 elementen in de array zijn in tegenstelling tot 3. Om dergelijke redenen verdient het de voorkeur om bij debugging debugPrint te gebruiken

Bijwerken van een foutopsporing in klassen en afdrukwaarden

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

stortplaats

dump drukt de inhoud van een object af via reflectie (mirroring).

Gedetailleerd overzicht van een array:

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

prints:

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

Voor een woordenboek:

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

prints:

▿ 3 sleutel / waarde-paren
▿ [0]: (2 elementen)
- .0: bar
- .1: 33
▿ [1]: (2 elementen)
- .0: baz
- .1: 42
▿ [2]: (2 elementen)
- .0: foo
- .1: 10

dump wordt aangegeven als dump(_:name:indent:maxDepth:maxItems:) .

De eerste parameter heeft geen label.

Er zijn andere parameters beschikbaar, zoals name om een label in te stellen voor het object dat wordt geïnspecteerd:

dump(attributes, name: "mirroring")

prints:

▿ mirroring: 3 sleutel / waarde paren
▿ [0]: (2 elementen)
- .0: bar
- .1: 33
▿ [1]: (2 elementen)
- .0: baz
- .1: 42
▿ [2]: (2 elementen)
- .0: foo
- .1: 10

U kunt er ook voor kiezen om alleen een bepaald aantal items af te drukken met maxItems: om het object tot een bepaalde diepte te parseren met maxDepth: en om de inspringing van afgedrukte objecten te wijzigen met indent:

Velen van ons beginnen met foutopsporing met eenvoudige print() . Laten we zeggen dat we zo'n klasse hebben:

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

en we hebben een voorbeeld van Abc als volgt:

let abc = Abc()

Wanneer we print() op de variabele, is de uitvoer

App.Abc

terwijl dump() uitgangen

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

Zoals te zien, voert dump() de hele klassenhiërarchie uit, terwijl print() eenvoudig de klassenaam uitvoert.

Daarom is dump() vooral handig voor het debuggen van UI's

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

Met dump(view) krijgen we:

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

Tijdens het print(view) krijgen we:

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

Er is meer informatie over de klasse met dump() , en dus is het nuttiger bij het debuggen van de klasse zelf.

NSLog() kunnen we zowel print() als NSLog() gebruiken om iets op de Xcode-console af te drukken.

Maar er zijn veel verschillen in print() en NSLog() functies, zoals:

1 TimeStamp: NSLog() drukt tijdstempel af samen met de tekenreeks die we hebben doorgegeven, maar print() drukt geen tijdstempel af.
bv

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

Output:

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

Het zal ook ProjectName samen met tijdstempel afdrukken.

2 Alleen string: NSLog() neemt alleen String als invoer, maar print() kan elk type invoer afdrukken dat eraan wordt doorgegeven.
bv

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 Prestaties: NSLog() functie is erg traag in vergelijking met print() functie.

4 Synchronisatie: NSLog() verwerkt gelijktijdig gebruik van een multi-threadingomgeving en drukt de uitvoer af zonder deze te overlappen. Maar print() zal dergelijke gevallen niet verwerken en rommelt tijdens het beoordelen van de uitvoer.

5 Device Console: NSLog() -uitgangen op apparaatconsole ook, we kunnen deze output zien door ons apparaat aan te sluiten op Xcode. print() print de uitvoer niet naar de console van het apparaat.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow