Swift Language
Inloggen Swift
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/
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:
print () vs dump ()
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.
print versus NSLog
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.